RabbitMQ 消息队列组件
1. RabbitMQ 介绍
RabbitMQ 是消息队列组件,实现两个客户端主机之间消息传输的功能(发布&订阅)。
一端发布消息,一端订阅消息,消息就会被推送到订阅消息那一端然后进行处理。
RabbitMQ 遵守AMQP 协议(标准的高级消息队列协议)。
AMQP 协议核心概念:交换机(交换机类型)、队列、绑定、消息。
两个客户端之间进行消息传输,一端产生消息另一端接收消息然后处理。按照以前的思想就是两个客户端直接进行网络通信 socket,通过网络消息将一条消息发送给对方让对方进行处理,这是一种最基础数据传输过程。

但是这种消息传输是存在缺陷的!如果有一端连接断开了,那另一端消息到底还发不发,是等,还是将这条消息丢弃掉。如果一直等,新产生的消息又该怎么办,总不能一直存着。所以这种安全性是很低的。而且一对一这种客户端里面,通常数据的产生和数据的处理所消耗的时间是不成正比的。通常消息的处理消耗时间更多。
基于两端消息进行安全传输的需求,所以高级消息队列组件就产生了。两端不直接进行消息传输了。而是通过消息队列服务器来进行一个中间的数据转发功能。发布消息客户端将信息发布到服务器上,服务器在将这条消息推送给订阅消息队列客户端让它来进行处理。

但是针对一个高级消息队列设计的话,单纯一个只是做中间数据转发其实是不够的。我们希望它能在做中间数据转发更加灵活,在不同场景提供不同的功能。这个时候就有了 AMQP 的核心概念(交换机、队列、绑定、消息)。
消息队列服务器里面首先有一个交换机,它是用来处理数据转发逻辑功能模块。然后还有队列。订阅客户端连接服务器告诉服务器订阅那个队列。发布客户端进行消息发布并不是直接把消息发布到某个队列中,而是把信息发布到交换机,由交换机来决定把这条消息放到那个队列。决定了这条消息推送到那个订阅客户端哪里去进行处理。

交换机该把消息放到那一个队列中呢?这个时候就有了不同的交换机类型:
- 广播交换:当交换机收到消息,则将消息发布到所有绑定的队列中
交换机和队列都创建好了之后,会把交换机和队列进行关系绑定,也就是交换机和队列建立一个关联关系。而且会设置一个 routing key(路由密钥:一定规则的字符串)用来标识这是一个放置什么类型消息的队列。

- 直接交换:根据消息中的 binding_key 与绑定的 routing_key 对比,一致则放到队列中




