消息驱动之背景概述(十九)

背景历史

在EJB2.0的时候,J2EE就引入了java message bean组件,即java消息组件,来处理企业组件之间的通讯。Spring Cloud里面提供的消息驱动就来源于这里,并且使用这些消息驱动模块来完成微服务之间的通讯。

消息中间件

当我们的消息生产者产生了消息之后,就把消息推送到RabbitMQ或Kafka这样的消息中间件上,消息消费者实现了对消息中间件的监听,当侦听到了消息的时候,就去获取对应的消息,完成整个消息的推送接收流程。

如果是简单的单条消息传递,那直接从消息生产者到消息消费者就OK了,但是消息一旦多起来,并且生产者和消费者都错综复杂,就更不利于管理了。使用消息中间件就可以集中化管理这些复杂的消息。消息生产者可以看作是现实生活中的寄信人,RabbitMQ或Kafka这样的消息中间件相当于是一个邮局,最后的收信人类似消息消费者。我们只需要把自己需要寄送的信件放到邮筒里,就可以完成信件的寄送,收信人也只需要从邮箱取信件,至于中间邮局是怎么完成信件的接收、运输和分发,我们都不关心。

Spring Cloud就完成了上述的工作,它使用Stream来帮助我们完成各个服务之间的消息推送接收,同时集成了RabbitMQ和Kafka这样的消息中间件API,可以十分便捷地完成消息推送接收开发。

其实这也是Spring Cloud整个核心的体现,简化开发流程,能让我们将大部分的精力集中到业务的开发上。

RabbitMQ简介

1.RabbitMQ的特点

RabbitMQ是最广泛部署的开放源码消息代理。

RabbitMQ在小型创业公司和大型企业中有超过3.5万的生产部署。

RabbitMQ是轻量级的,并且可以很容易地部署在网站和云中。

RabbitMQ支持多个消息传递协议。

RabbitMQ可以部署在分布式和级联配置中,以满足高规模、高可用性需求。

RabbitMQ在许多操作系统和云环境中运行,并为大多数流行语言提供了广泛的开发工具。

2.AMQP协议

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。

下图就是一个AMQP协议的模型:


消息生产者与RabbitMQ服务器建立了一个channel通道,通过这个channel通道向交换器传输消息,交换器接收了消息之后决定把消息交给哪一个消息队列,同样,消息消费者和RabbitMQ之间也建立了一个channel通道,消息消费者通过这个通道来监听消息队列的消息。

Kafka简介

Kafka是Apache的一个分布式流媒体平台。

首先看看下面列出的流媒体特性:

  • 发布和订阅记录流,类似于消息队列或企业消息传递系统。
  • 以一种容错的持久方式存储记录流。
  • 在发生的过程中处理记录流

Kafka通常用于两大类应用:

  • 构建实时的流数据管道,可靠地在系统或应用程序之间获取数据
  • 构建能够转换或响应数据流的实时流媒体应用程序

Kafka的几个特性:

  • Kafka是在一个或多个服务器上运行的,可以跨越多个数据中心。
  • Kafka的集群存储了被称为Topic类别的记录流。
  • 每条记录由一个键、一个值和一个时间戳组成。

Kafka的四个核心API:

  • 生产者API允许应用程序将记录流发布到一个或多个Kafka的Topic。
  • 使用者API允许应用程序订阅一个或多个Topic,并处理生成给它们的记录流。
  • Streams API允许应用程序充当流处理器,从一个或多个Topic中获取输入流,并生成一个输出流到一个或多个输出Topic,有效地将输入流转换为输出流。
  • 连接器API允许构建和运行可重用的生产者或消费者,将Kafka的Topic与现有的应用程序连接起

猜你喜欢

转载自blog.csdn.net/mrspirit/article/details/80564456