zoukankan      html  css  js  c++  java
  • 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的回调,不太清楚,需要继续查资料

  • 相关阅读:
    (Problem 4)Largest palindrome product
    (Problem 3)Largest prime factor
    (Problem 2)Even Fibonacci numbers
    (Problem 1)Multiples of 3 and 5
    Ural 1086
    Ural 1319
    Ural 1149
    Ural 1079
    Ural 1068
    2016/04/06
  • 原文地址:https://www.cnblogs.com/changeCode/p/11299471.html
Copyright © 2011-2022 走看看