本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一 RabbitMq介绍
我们通常谈到消息队列,就会联想到这其中的三者:生产者、消费者和消息队列,生产者将消息发送到消息队列,消费者从消息队列中获取消息进行处理。对于RabbitMQ,它在此基础上做了一层抽象,引入了交换器exchange的概念,交换器是作用于生产者和消息队列之间的中间桥梁,它起了一种消息路由的作用,也就是说生产者并不和消息队列直接关联,而是先发送给交换器,再由交换器路由到对应的队列,至于它是根据何种规则路由到消息队列的,就是我们下面需要介绍的内容了。这里的生产者并没有直接将消息发送给消息队列,而是通过建立与Exchange(交换器)的Channel(信道),将消息发送给Exchange,Exchange根据路由规则,将消息转发给指定的消息队列。消息队列储存消息,等待消费者取出消息,消费者通过建立与消息队列相连的Channel,从消息队列中获取消息。
Rabbit Mq ——》 Message Queue : 消息队列
队列特点:先进先出
生产者:发送消息方称为是生产者,谁生产消息谁就是生产者
消费者:监听消息(队列),监听到后拉取下来进行消费,称为是消费者
二 Rabbitmq优劣势
1. 优势
-
应用解耦
生产者和消费者之间进行了应用的解耦
-
异步提速 使用前提是系统为异步调用系统
- 削峰填谷
通过削峰填谷保证系统的稳定性
2. 劣势
-
系统稳定性下降
-
数据一致性问题
- 消息丢失---->消息确认
- 消息重复---->消息幂等性问题
- ........
3. 使用场景
- 系统必须支持异步通信
三 MQ常见产品
-
RabbitMq
- 使用erlang语言进行开发,效率高,吞吐量很大
- 属于rabbit公司
-
RocketMq
- 使用java开发,脱胎于kafka(来源、模仿)
- 属于阿里,目前已经捐献给apache,称为了顶级项目
-
ActiveMQ
- 是一款很古老的mq,目前使用的较少
- 属于apache
-
Kafka
- 属于apache
- 用于大数据环境使用
四 Rabbitmq架构
注意事项:
- Exchange交换机不具备保存消息的功能,需要与队列完成绑定
- 绑定后符合规则的消息会路由至队列进行保存,不符合路由规则的消息或者是没有绑定队列的交换机消息会丢失