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

先说下这个参数的作用:

/** * 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,则匹配不到的消息直接被丢弃!

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

时间: 2024-10-12 03:03:47

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

SpringBoot接收对象中包含时间参数,格式化接收时间

SpringBoot接收对象中包含时间参数,前端传过来的时间数据为'2019-12-19 08:08:08',SpringBoot不能自己转化时间为Date,会报错. 解决办法: 使用@JsonFormat注解 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 原文地址:https://www.cnblogs.com/mxh-java/p/12070539.html

SpringSecurity解决跨域问题,在SpringBoot整合SprinSecurity中如何用前后端分离Ajax登录,Ajax登录返回状态200还是近error

先说说SpringSecurity如何实现前后端分离Ajax登录? 今天使用SpringBoot整合SpringSecurity中想使用Ajax替代SpringSecurit的Form表单提交,在这里我们的提交方式还是使用表单提交 http.formLogin().loginProcessingUrl("/authentication/form") loginProcessingUrl方法表示你登录请求的地址,在这里SpringSecurity默认登录页面地址是/login ,填写了u

SpringBoot 基于web应用开发(请求参数获取,静态资源,webjars)

SpringBoot 基于web应用开发 一.Lombok使用 1.导入依赖库 <dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId>    <version>1.18.6</version></dependency> 2.安装插件 3.在实体bean使用 @Data    相当于set,ge

SpringBoot整合freemarker中自定义标签获取字典表的数据

因为在前端要根据字典表中的数据去将1.2这些值转换成对应的文字解释 1.首先要创建一个类去实现 TemplateDirectiveModel 类 @Component public class DictDirective implements TemplateDirectiveModel { @Override public void execute(Environment environment, Map map, TemplateModel[] templateModels, Templat

getUrlParam,jQuery中的URL参数获取

大家经常会需要在一段URL中截取到自己所需参数的值,下面的方法也许能帮到您: $.getUrlParam = function(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r!=null) return unescape(r[2]); return nu

Linux中执行脚本参数获取

Linux中变量$[#,@,0,1,2,*,$,?]含义 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 [email protected] 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当前进程ID号 $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误 区别:[email protected], $* 相同点:都

SpringBoot整合Mybatis传参的几种方式

转自https://blog.csdn.net/irelia_/article/details/82347564 在SpringBoot整合Mybatis中,传递多个参数的方式和Spring整合Mybatis略微有点不同,下面主要总结三种常用的方式 一.顺序传参法 Mapper层: 传入需要的参数 public interface GoodsMapper { public Goods selectBy(String name,int num); }1234Mapper.xml: *使用这种方式,

Springboot中使用自定义参数注解获取 token 中用户数据

使用自定义参数注解获取 token 中User数据 使用背景 在springboot项目开发中需要从token中获取用户信息时通常的方式要经历几个步骤 拦截器中截获token TokenUtil工具类解析token中的用户信息 把解析结果存入到成员变量中 controller中通过TokenUtil工具类提供的静态方法获取用户信息 下面是过程示例代码 /*--------1.拦截器中获取---------*/ String token =request.getHeader("token"

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="