RabbitMq 消息确认机制详解 SpringCloud
  TEZNKK3IfmPf 2023年11月13日 24 0

1 消息可靠性

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

RabbitMq 消息确认机制详解 SpringCloud#### 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;
    }
  }

完毕

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月26日   34   0   0 javaRocketMQspringcloud
  TEZNKK3IfmPf   2023年11月14日   21   0   0 springcloud
  TEZNKK3IfmPf   2024年04月19日   33   0   0 springcloud
TEZNKK3IfmPf