在了解RabbitMQ消息可靠性之前,先来了解一下RabbitMQ整个消息投递的路径:
producer ——> exchange ——> queue ——> consumer
RabbitMQ保证消息的可靠性主要分为两个部分:
(1)消息投递(生产者向MQ发送消息,确保MQ接收到消息)
(2)消息确认(消费者签收消息)
1、消息投递
在使用RabbitMQ的时候,作为消息发送方拒绝任何消息丢失或者投递失败场景,RabbitMQ为我们提供了两种方式来保证消息的投递可靠性。
- confirm确认模式
- return退回模式
confirm确认模式
(1)消息从producer——>exchange,会回调confirmCallback,重写confirm方法有3个参数:
correlationData:相关配置信息
ack:exchange交换机是否成功收到信息,true成功,false失败
cause:失败原因
return退回模式
消息从exchange——>queue,当交换机到队列路由失败时才会执行returnCallback
步骤:
代码:
2、消息确认
Consumer ack 消费者确认
ack指Acknowledge,确认,表示消费者收到消息后的确认方式。
有3种确认方式:
- 自动确认:acknowledge="none"
- 手动确认:acknowledge="manual"
- 根据异常情况确认:acknowledge="auto"
其中自动确认是指,一旦消息被consumer收到,则自动确认收到,并将相应的message从RabbitMQ缓存中移除,但在实际业务处理中,很可能消息接收到,业务处理出现异常,那么该消息就会丢失。如果设置了手动确认模式,则在业务处理成功后,调用channel.basicAck()手动签收,如果出现异常,则调用channel.basicNack()方法,让其自动重新发送消息。
步骤:
代码:
版权归原作者 阿里雄哥 所有, 如有侵权,请联系我们删除。