RabbitMQ 就是一个用于传递消息的队列中间件,帮你把消息从 A 传给 B。主要的用途就是帮助应用程序解耦、提高可靠性和扩展性。
以一个最常见的场景为例
RMQ 的使用形式有多种,我们以最常用的为例,如下所示:
最常见的 RMQ 用法
- P 作为消息发布者(Publisher)将消息发送到 X 即交换机(Exchange),X 将消息分发到 Q1,Q2 两个消息队列(Queue)中。
- C1,C2 两个消费接收者即消费者(Consumer),分别将自己以消费者的身份注册到 Q1,Q2 两个队列上——A.K.A. 订阅/监听。
- 当 Q1,Q2 内有消息时,就会将这些消息推送给他们的订阅方,即消费者 C1 和 C2。最终 C1 和 C2 可以根据收到的消息完成各种业务处理。
注:
- 例子为了简化,一个队列 Q 只有一个消费者 C,但其实同一个 Q 是可以有多个 C 订阅的,实际运用时,后者也更常见。
- 我们能看到这里的消息发布者 P 和消息消费者 C1,C2 不直接交互,消息是由队列作为中间方异步传递的,P可以按照自己的节奏生产消息,C可以按照自己的节奏消费消息,互不依赖,这就是解耦。
- C 因为 BUG 或者升级发生宕机或者下线时,P 产生的消息是缓存在队列 Q 中的,C 重新上线后可以继续消费,所以这些消息并不会丢失。这就是可靠性。
- P 可能在短时间产生大量消息,但这并不会给 C 带来任何压力,因为这些消息会被缓存在队列 Q 中,C 按照自己的节奏消费处理消息即可。这也是可靠性。我们可以利用这一特性来处理业务的短时高并发。
- 当一个 C 消费 Q 消息的速度太慢时,我们可以增加注册更多的 C 一起来消费。这就是扩展性。
更多使用场景
理解本文的例子后,可以直接阅读 RabbitMQ 官网 tutorials,非常清晰易懂。
网友评论