码迷,mamicode.com
首页 > 编程语言 > 详细

springboot整合rabbirmq中使用mandatory参数获取匹配失败的消息!

时间:2019-01-12 12:15:25      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:err   div   错误   消息   报错   作用   特定   with   tostring   

先说下这个参数的作用:

/**
* Mandatory为true时,消息通过交换器无法匹配到队列会返回给生产者
* 为false时,匹配不到会直接被丢弃
*/
在一些特定场景下还是有用处的!
接下来说一下绑定队列与交换器,需要在配置类或者xml中提前配置好
尤其是queue,如果同时写了消费者,必须先配置好bean,即mq中队列必须存在,不然会报错
    //创建消息队列
    @Bean
    public Queue testQueue(){
        //boolean表示消息是否持久化
        return new Queue("testQueue",true);
    }
    //创建交换器
    @Bean
    public DirectExchange exchange(){
        //boolean表示消息是否持久化
        return new DirectExchange("exchange");
    }
    //通过指定key绑定队列与交换器
    @Bean
    Binding bindingExchangeMessages(@Qualifier("testQueue") Queue queue, DirectExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("routeKey");
    }

  绑定好之后就可以测试这个参数了,使用我们指定的交换器和key!

程序启动之后会自动创建,这里如果需要捕获匹配失败的消息需要添加一个监听器

测试:当参数设置为true时,写个错误的key:

技术分享图片

    @Override
    public void sendTest() {
        /**
         * Mandatory为true时,消息通过交换器无法匹配到队列会返回给生产者
         *          为false时,匹配不到会直接被丢弃
         */
        rabbitTemplate.setMandatory(true);
        //添加监听器获取返送失败的消息
        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
            @Override
            public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
                System.out.println("replyCode:"+replyCode);
                System.out.println("replyText:"+replyText);
                System.out.println("匹配队列失败,返回消息:" + message.toString());
            }
        });
        // 向指定交换器发送消息,需要key
        rabbitTemplate.convertAndSend("exchange","route","测试消息内容");
    }

 由于key不对,匹配队列失败,参数为true,所以消息会返回给生产者:

技术分享图片

如果写上正确key,则正常发送接受,如果

setMandatory

设置为false,则匹配不到的消息直接被丢弃!

springboot整合rabbirmq中使用mandatory参数获取匹配失败的消息!

标签:err   div   错误   消息   报错   作用   特定   with   tostring   

原文地址:https://www.cnblogs.com/houzheng/p/10259042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!