当前位置:   article > 正文

RabbitMQ如何保证消息的可靠性

rabbitmq如何保证消息的可靠性

在了解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()方法,让其自动重新发送消息。

步骤: 

代码:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/805531
推荐阅读
相关标签
  

闽ICP备14008679号