消息(Message)是指在应用之间传递的数据。消息可以非常简单,比如只包含文本字符串、JSON字符串等等,但也可以非常复杂,如内嵌对象。
消息队列中间件(Message Queue Middleware,简称为 MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据通信,并基于数据通信来进行分布式系统集成。
消息队列中间件,也可以称为消息队列或者消息中间件。消息中间件有两种传递模式:
点对点(P2P,Point-to-Point)模式:该模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为了可能。
发布/订阅(Pub/Sub)模式:该模式定义了如何向一个内容节点发布和订阅消息,这里的内容节点称为主题(topic),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消费订阅者则从主题中订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行直接通信也可以保证消息的传递,发布/订阅模式在消息的一对多广播时采用。
目前开源的消息中间件有很多,比较主流的有:
RabbitMQ:官网地址 https://www.rabbitmq.com
Kafka:官网地址 https://kafka.apache.org
ActiveMQ:官网地址 https://activemq.apache.org
RocketMQ:官网地址 https://rocketmq.apache.org
等等。面向消息的中间件(简称为 MOM,Message Oriented Middleware)提供了以松散耦合的灵活方式集成应用程序的一种机制。消息中间件提供了基于存储和转发的应用程序之间的异步数据发送功能(即应用程序之间不需要直接通信,应用程序而是与作为中介的消息中间件通信)。
消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件的系统中,不同的对象之间通过传递消息来触发对方的事件,以完成相应的操作。发送者将消息发送给消息服务器,消息服务器将消息通过一定的规则存放到若干个队列中,在合适的时候再讲消息发送给接收者。
假如我们有两个应用程序,分别是应用程序A和应用程序B,应用程序A与应用程序B通过使用消息中间件的API发送消息来进行通信。如下图:
图1:应用通过消息中间件通信
上图中,应用程序A将消息通过API接口发送到消息中间件,消息中间件则把消息路由给了应用程序B。当应用程序A发送消息时,应用程序B可能没有运行,但消息中间件将消息保存下来,直到应用程序B运行时才把消息路由给它,执行业务逻辑。这样可以防止应用程序A因为等待应用程序B消费消息而出现阻塞,影响性能。