• rabbitmq学习之路(四)


    今天就说一下 如何防止消息丢失    防止消息丢失 分为 消息发送确认和消息消费确认,今天先说消息发送确认

    经过我的了解,消息发送确认分为两个步骤,消息到达交换机和消息到达队列,这是两个分开的步骤

    直接上代码来介绍,要开启消息发送确认需要在配置上增加这两项

    #开启生产者消息确认机制
    spring.rabbitmq.publisher-confirms=true
    spring.rabbitmq.publisher-returns=true

    我们需要知道两个接口,

    RabbitTemplate.ConfirmCallback 
    RabbitTemplate.ReturnCallback


    第一个接口,对应着消息到达交换机这一步,第二个接口,对应着消息到达队列这一步

    @Service
    public class ConfirmCallBackListener implements RabbitTemplate.ConfirmCallback {
    
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @PostConstruct
        public void init(){
            rabbitTemplate.setConfirmCallback(this);
        }
    
    
        @Override
        public void confirm(CorrelationData correlationData, boolean ack, String cause) {
            System.out.println("消息唯一标识:"+correlationData);
            System.out.println("确认结果:"+ack);
            System.out.println("失败原因:"+cause);
        }
    }
    @Service
    public class ReturnCallBackListener implements RabbitTemplate.ReturnCallback{
    
    
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @PostConstruct
        public void init(){
            rabbitTemplate.setReturnCallback(this);
        }
    
        @Override
        public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
            System.out.println("return--message:" + new String(message.getBody()) + ",replyCode:" + replyCode + ",replyText:" + replyText + ",exchange:" + exchange + ",routingKey:" + routingKey);
        }
    }

    就是这么简单,配置完成之后,一旦消息成功到达交换机,confirmCallBack 收到的ack就是true,如果没有到达交换机,收到的ack就是false

    如果消息到达了队列,那么returnCallBack不会收到任何消息,如果消息到达不了队列(路由不到队列等),就会触发回调

    我在查资料的时候发现,有一篇文章说需设置mandatory=true,否则不会触发returncallback的回调,不太清楚,需要继续查资料

  • 相关阅读:
    全国计算机等级考试二级教程-C语言程序设计_第10章_字符串
    网易云课堂_程序设计入门-C语言_第六章:数组_2鞍点
    arcgis api for silverlight开发系列之二:缓存图层与动态图层及图层总结 .
    VS2010程序打包操作(超详细的)
    地图三要素
    创业建议
    写代码时,必须注意“异常处理”
    WPF——RenderTransform特效
    MVVM特点、源(数据)与目标(如:控件等)的映射
    使用触发器定义 WPF 控件的行为
  • 原文地址:https://www.cnblogs.com/changeCode/p/11299471.html
Copyright © 2020-2023  润新知