RabbitMQ的一些概念
Connection :和RabbitMQ的一个TCP连接, Connection在应用程序内最好是消费消息一个, 推送消息一个, 并且应该保持长连接
Channel :在TCP连接里和RabbitMQ通信的一个通道
Exchange :RabbitMQ
中的一个交换机
Queue :RabbitMQ中的一个队列
Producer :消息生产者,
消息生产者把消息发送到
RabbitMQ
Consumer :消息消费者,
消息消费者从
RabbitMQ
的
Queue
消费消息
Exchange, Queue, Producer, Consumer
之间的关系
![](https://i-blog.csdnimg.cn/blog_migrate/1bef0c80c22ee1621b90c043b3052d35.png)
为什么选择 为
RabbitMQ
RabbitMQ
的持久化支持,保证了消息的稳定性,虽然单实例性能比
kafka
,
Zero
低,但是它支持持久化和他的
ack
机制可靠性更高,保证数据不丢
失。
高并发扩展,
RabbitMQ
使用了
Erlang
开发语言,
Erlang
是为电话交换机开发的语言,天生自带高并发光环和高可用特性。
集群部署简单。
开源,社区活跃度高。
RabbitMQ的主要作用
解耦
消息生产者和消息消费者不直接连接,通过消息中间件解耦。
流量削峰
如果下游服务的速度跟不上上游服务的速度
,
那么可以用
MQ
来进行流量削峰
,
上游只要把消息推送给
MQ
即可
,
由消息消费者从
MQ
中消费消息
,
典
型的应用场景是短信推送
水平扩展
Erlang
语言天生具备分布式特性,使得
RabbitMQ
天然支持
Clustering
,不需要像
Kafka
那样通过
ZooKeeper
分别来实现
HA
方案。 利用
MQ
的
Round
Robin
机制
,
可以轻松的实现消费者的水平扩展
,
只要多开一个消费者就水平增加了消费能力
异步
消息会保存在
RabbitMQ
中
,
消息生产者不需要等消费者把消息消费完了才返回
,
消息生产者只要把消息投递成功即可返回
可恢复性
结合
RabbitMQ
消息的持久化
, ACK
机制
,
可以保证消息没有消费成功的情况下消息不会丢失
,
从而当消息消费者跌机以后重新启动便可继续消费消
息
消息延时
通过引入第三方
plugin
(
rabbitmq_delayed_message_exchange
)
,
可以实现消息延时
,
生产者推送消息给
RabbitMQ
以后
, RabbitMQ
不
会立即分发给
Queue,
而是到了给定的时间才会把消息分发给
Queue
,在实际业务中,我们可以把一部分用定时框架去做的事情通过消息延迟方式
去实现。
CAP和Base理论的基础部件