RabbitMq 消息确认机制详解 SpringCloud

Posted 早起的年轻人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMq 消息确认机制详解 SpringCloud相关的知识,希望对你有一定的参考价值。

1 消息可靠性

消息从发送,到消费者接收,会经理多个过程,其中的每一步都可能导致消息丢失.

#### 2 常见的丢失原因

  • 发送时丢失:
    生产者发送的消息未送达exchange
    消息到达exchange后未到达queue
  • MQ宕机,queue将消息丢失
    consumer接收到消息后未消费就宕机
2.2 RabbitMQ分别给出了解决方案:
  • 生产者确认机制
  • mq持久化
  • 消费者确认机制
  • 失败重试机制

3 生产者消息确认

RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。这种机制必须给每个消息指定一个唯一ID。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功。

  • publisher-confirm-type 消息确认类型,
    • simple:同步等待confirm结果,直到超时
    • correlated:异步回调,定义ConfirmCallback,MQ返回结果时会回调这个ConfirmCallback
  • publisher-returns 交换机发送到队列中,失败时触发
  • template.mandatory:定义消息路由失败时的策略。true,则调用ReturnCallback;false:则直接丢弃消息
spring:
  rabbitmq:
    publisher-confirm-type: correlated
    publisher-returns: true
    template:
      mandatory: true
  

然后配置 RabbitTemplate

@Slf4j
@Configuration
public class RabbitCommonConfig 
    
    @Bean
    public RabbitTemplate fastjsonRabbitTemplate(ConnectionFactory connectionFactory)
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        //设置强制回调
        rabbitTemplate.setMandatory(true);
        //
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() 
            @Override
            public void confirm(CorrelationData correlationData, boolean b, String s) 
                log.info("对应数据 ",correlationData);
                log.info("确认情况 ",b);
                log.info("原因 ",s);
            
        );
        //发送失败时的回调
        rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback() 
            @Override
            public void returnedMessage(ReturnedMessage returnedMessage) 
                log.info("确认情况 ",returnedMessage.toString());
                //日志记录 重试
            
        );

        return rabbitTemplate;
    
  

完毕

以上是关于RabbitMq 消息确认机制详解 SpringCloud的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMq 消息确认机制详解 SpringCloud

近九万字图文详解RabbitMQ

rabbitmq详解

详解Android消息机制之Message

RabbitMQ的消息确认机制

RabbitMQ的消息确认机制