RabbitMQ mandatory参数 路由器匹配不到队列返回响应
mandatory参数当交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么 RabbitM 会调用Basic.Return命令将消息返回给生产者 。通过调用channel.addReturnListener 来添加ReturnListener 监听器实现。
这里有一个坑:保证在在发送消息之前绑定监听器,在retrun message之前channel不关闭
不然将无法收到返回消息
实现效果如下
重点代码: //绑定路由不到队列的回调方法(一定要在发送消息之前绑定)
channel.addReturnListener(new ReturnListener() {public void handleReturn(int replyCode, String replyText,String exchange, String routingKey,AMQP.BasicProperties properties, byte[] body) throws IOException {String message = new String(body);System.out.println( "Basic.Return 返回的结果是: "+message );}});
重点代码:发送消息是时mandatory设置为true
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY+"Basic.Return", true,null, message.getBytes());
全部代码:
public class Send {//队列名private final static String QUEUE_NAME = "wsd_test";//路由器名private final static String EXCHANGE_NAME = "exchange";//绑定键private final static String BINDING_KEY = "wsd_exchange";//路由键private final static String ROUTING_KEY = "wsd_exchange";private static Connection connection =null;private static Channel channel = null;public static void main(String[] args) {try{// 获取到连接以及mq通道connection = ConnectionUtil.getConnection();// 从连接中创建通道channel = connection.createChannel();//声明了一个direct 类型的交换器channel.exchangeDeclare(EXCHANGE_NAME,"direct",true,false,null);// 声明队列QUEUE_NAMEchannel.queueDeclare(QUEUE_NAME, false, false, false, null);//将路由与队列绑定,再为绑定的路径赋值一个绑定键channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,BINDING_KEY);//绑定路由不到队列的回调方法channel.addReturnListener(new ReturnListener() {public void handleReturn(int replyCode, String replyText,String exchange, String routingKey,AMQP.BasicProperties properties, byte[] body) throws IOException {String message = new String(body);System.out.println( "Basic.Return 返回的结果是: "+message );}});//发送数据for (int i=0;i<10;i++){// 消息内容String message = "Hello World!"+i;//指定发送消息到哪个路由,以及他的路由键,消息等channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY+"Basic.Return", true,null, message.getBytes());System.out.println(" [x] Sent '" + message + "'");Thread.sleep(200);}}catch (Exception e){e.printStackTrace();}}
}
RabbitMQ mandatory参数 路由器匹配不到队列返回响应相关推荐
- RabbitMQ学习笔记 - mandatory参数
参考:<<RabbitMQ实战指南>> mandatory和immediate是channel.basicPublish方法中的两个参数,它们都有当消息传递过程中不可达目的地时 ...
- rabbitmq消息发布mandatory参数
channel.basicPublish("", "",true, null, message.getBytes(StandardCharsets.UTF_8) ...
- RabbitMQ发布订阅实战-实现延时重试队列
RabbitMQ是一款使用Erlang开发的开源消息队列.本文假设读者对RabbitMQ是什么已经有了基本的了解,如果你还不知道它是什么以及可以用来做什么,建议先从官网的 RabbitMQ Tutor ...
- RabbitMQ通过TTL和DLX实现延时队列
RabbitMQ实现延时队列 一.介绍 1.TTL 如何设置TTL(2种方式): 2.Dead Letter Exchanges 二.实现延时队列的思路 三.SpringBoot+RabbitMQ实现 ...
- 没有与参数列表匹配的 重载函数 strcpy_s 实例_Zemax光学设计实例(84)Ftheta扫描平场透镜的设计...
导论:F-theta透镜又叫激光扫描聚焦镜,是激光加工行业必不可少的光学元件之一.对于理想薄透镜,光束的偏转角度与轨迹位置的关系为Y=F*tan(θ),这种非线性关系会使得匀速偏转的振镜扫描速度与轨迹 ...
- vs2017编写模板类出现以下错误时:没有与参数列表匹配的构造函数……
程序源码: #include<iostream> using namespace std;template <typename T1=int,typename T2=double&g ...
- argument type mismatch 属性参数不匹配
argument type mismatch 属性参数不匹配 mapper映射文件中javaType里面的类型要和实体类一样,
- 【Python】解决CNN中训练权重参数不匹配size mismatch for fc.weight,size mismatch for fc.bias
目录 1.问题描述 2.问题原因 3.问题解决 3.1思路1--忽视最后一层权重 额外说明:假如载入权重不写strict=False, 直接是model.load_state_dict(pre_wei ...
- POSIX标准总体分析 执行调度 消息传递 调度参数 进程调度函数 关闭消息队列 得到消息队列参数 设置调度参数 时钟和定时器 时钟和定时器函数 消息传递函数 打开消息队列 设置消息队列参数
粉丝不过w 调度参数 一个调度参数结构 sched_param 包括了调度策略所支持的执行者所需要的调度参数,它在头文件<sched.h>中定义 执行者可根据规对该结构进行扩展 调度策略 ...
最新文章
- source code compiled install mongodb
- 【算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)
- PHP表单提交参数验证类(可修改)
- Hibernate和MyBatis的缓存机制和比较
- SAP License:SAP 清帐函数示例
- tcpdump非常实用的抓包实例
- 服务器被挖矿入侵,进程 command为ld-linux-x86-64占用cpu很高
- php empty 0问题,解析:php empty 和空字符串区别
- Linux 虚拟内存
- python控制画笔尺寸_Python turtle库的画笔控制说明
- 面向对象下 abstract关键字(宋红康JAVASE)
- 【头歌】顺序表的基本操作
- 均衡负载集群(LBC)-2
- 屎壳螂大将军。文/江湖一剑客
- 内核proc参数注释(kernel、vm、net、fs四类)
- 天融信java面试_天融信面试准备
- VAS开启LaFi空投——助力打造区块链数字黄金新生态
- javaoop-01
- 商城项目-商品规格数据结构
- 什么是RFID技术?RFID(射频识别:Radio Frequency Identification)电子标签技术应用场景介绍