Message Broker(消息代理)
维基百科对 Message Broker 的定义是:Message broker 是一种中介程序模块,它把消息从发送方的正式消息传递协议转化为接收方的正式消息传递协议。
这个定义略繁琐,下面看看 RabbitMQ 官网对 Message broker 的定义:
Message broker 接收来自发布者的消息并将其路由到消费者。
上面两个定义说的都是同一件事情,但是 RabbitMQ 官网的定义里缺少了“转换”这部分。
RabbitMQ 实现了一个加 AMQP(Advanced Message Queuing Protocol)的协议,AMQP 就如果互联网的 HTTP 协议,它更注重于如何传输数据,并不关心发送的数据是什么。这也就意味着需要消息的发送者和接收者来协调消息的格式。
为什么需要 Message broker?
看下图。有这样一个应用,客户端需要与服务器进行通信,传递数据。最简单的情况就是客户端通过 HTTP 类协议直接与服务器连接,并发送数据。
目前一切都很简单明了。
但是,如果服务器因为维护或其它原因发生了停机,或者你想对其横向扩展,添加更多的服务器来进行响应。那么问题就来了,客户端目前是与这台服务器紧密的耦合在一起了,而随着系统的增长和进化,这种紧耦合就开始让人头疼。
如果,我们在客户端与服务器之间放置一个 Message broker,那么情况就不一样了:
客户端首先将数据发送给 Message broker。Message broker 会对数据进行检验,并将其发送给服务器。
但是在这种简单的情景下,感觉没带来什么好处。
但是,Message broker 可以通过简单的设置来允许多种场景,从而让后端服务器的横向扩展或停机维护等工作变得轻松,并且客户端并不会感知到任何的变化。
这种解耦的架构在分布式应用中非常的常见,这意味着所有一切所唯一依赖可用的东西就是 Message broker。因为 Message broker 唯一的工作就是传输数据,所以没有必要经常对其进行改动,所以它是一个相对安全可靠的组件。
对于像 RabbitMQ 这样可以设置集群来支持高可用的 Message broker,更是这样。
Exchange 和 Queue(消息交换和队列)
上文提到过 RabbitMQ 实现了 AMQP 这个协议(RabbitMQ 所支持的 AMQP 的版本是 0.9.1),这个协议的内容很多,但为了构建入门级的分布式应用,我们只需要了解以下几点即可。
在最简单的场景下,RabbitMQ 的架构示意图大致如下:
· 首先某个消息从发布者那里发往 RabbitMQ