rabbitmq消息投递接收流程
摘自《rabbitmq实战指南》
消息投递
消息投递指的是生产发送消息的过程:
- 生产者连接到
rabbitmq broker
,建立连接(Connection
),开启一个信道(Channel
) - 生产者声明一个交换器,设置交换器类型和是否持久化的属性
- 生产者声明一个队列,设置如是否排它,是否持久化和是否自动删除属性
- 生产者通过路由键(
RoutingKey
)将交换器和队列绑定起来 - 生产者将消息发送至
broker
, 包含路由键和交换器的信息 - 交换器根据路由键找到匹配的队列
- 如果找到,则将消息存储在消息队列中
- 如果没有找到匹配的队列,则根据生产者配置的属性选择丢弃还是回退给生产者
- 关闭信道
- 关闭连接
消息接收
消息接收指的是消费者接收消息的过程:
- 消费者连接到
rabbitmq broker
服务节点,建立连接(Connection
),开启一个信道(Channel
) - 消费者向
rabbitmq broker
请求消费相应队列中的消息,可能会设置相应的回调函数 - 等待
rabbitmq broker
回应,消费者接收消息 - 消费者确认(
ack
)接收到消息 rabbitmq broker
从队列中删除相应已经被确认的消息- 关闭信道
- 关闭连接
connection和channel
多消费者消费消息就需要建立多个connection
,而connection
就是TCP连接,要知道TCP连接的代价是异常昂贵,所以rabbitmq采用类似NIO的模式,即多路复用,单线程,多通道。对于rabbitmq
来讲,信道Channel
复用了连接connection
,节省了建立TCP连接的资源