RabbbitMq Return 消息机制
Return Listener 用于处理一些不可路由的消息!
- 我们的消息生产者,通过指定一个Exchang 和 RoutingKey , 把 消息送达到某一个队列中去,然后我们的消费者监听队列,进行消费处理操作!
- 但是在某些情况下,如果我们在发送消息的时候,当前的Exchange不存在或者指定的路由key路由不到,这个时候如果我们需要监听这种不可达的消息,就要使用Return Listener!
Return 消息机制
- 在基础API中有一个关键的配置项:
- Mandatory:
- 如果为true,则监听器会接收到路由不可达的消息,然后进行后续处理,
- 如果为false,那么broker端自动删除该消息
生产者代码
package com.bfxy.rabbitmq.api.returnlistener;import java.io.IOException;import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.ReturnListener;
import com.rabbitmq.client.AMQP.BasicProperties;public class Producer {public static void main(String[] args) throws Exception {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost("localhost");
// connectionFactory.setHost("192.168.43.223");connectionFactory.setPort(5672);connectionFactory.setVirtualHost("/");connectionFactory.setUsername("guest");connectionFactory.setPassword("guest");Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();String exchange = "test_return_exchange";String routingKey = "return.save";String routingKeyError = "abc.save";String msg = "Hello RabbitMQ Return Message";channel.addReturnListener(new ReturnListener() {@Overridepublic void handleReturn(int replyCode, String replyText, String exchange,String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException {System.err.println("---------handle return----------");System.err.println("replyCode: " + replyCode);System.err.println("replyText: " + replyText);System.err.println("exchange: " + exchange);System.err.println("routingKey: " + routingKey);System.err.println("properties: " + properties);System.err.println("body: " + new String(body));}});channel.basicPublish(exchange, routingKeyError, true, null, msg.getBytes());//channel.basicPublish(exchange, routingKeyError, true, null, msg.getBytes());}
}
消费者代码
package com.bfxy.rabbitmq.api.returnlistener;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;public class Consumer {public static void main(String[] args) throws Exception {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost("localhost");
// connectionFactory.setHost("192.168.43.223");connectionFactory.setPort(5672);connectionFactory.setVirtualHost("/");connectionFactory.setUsername("guest");connectionFactory.setPassword("guest");Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();String exchangeName = "test_return_exchange";String routingKey = "return.#";String queueName = "test_return_queue";channel.exchangeDeclare(exchangeName, "topic", true, false, null);channel.queueDeclare(queueName, true, false, false, null);channel.queueBind(queueName, exchangeName, routingKey);QueueingConsumer queueingConsumer = new QueueingConsumer(channel);channel.basicConsume(queueName, true, queueingConsumer);while(true){Delivery delivery = queueingConsumer.nextDelivery();String msg = new String(delivery.getBody());System.err.println("消费者: " + msg);}}
}
结果如下:
RabbbitMq Return 消息机制相关推荐
- android return 如何跳出两个循环_关于不得不学的Android知识之消息机制
概述 相信不管是出入Android,还是已开发多年的老司机们,肯定都对Android的Handler不会陌生,而它就是今天要介绍的Android消息机制中的一部分.在Android系统中,有两大特色利 ...
- Android消息机制学习笔记
Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑: MessageQueue:消息队列,它的内存存储了一组消息,以队 ...
- iOS开发系列--通知与消息机制
http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣 ...
- Android消息机制Handler用法
这篇文章介绍了Android消息机制Handler用法总结,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 1.简述 Handler消息机制主要包括: Messa ...
- Android异步消息机制
2019独角兽企业重金招聘Python工程师标准>>> 目录介绍 1.Handler的常见的使用方式 2.如何在子线程中定义Handler 3.主线程如何自动调用Looper.pre ...
- windows程序消息机制(Winform界面更新有关)--转
1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队 ...
- Android:Handler的消息机制
前言 Android 的消息机制原理是Android进阶必学知识点之一,在Android面试也是常问问题之一.在Android中,子线程是不能直接操作View,需要切换到主线程进行.那么这个切换动作就 ...
- Handler消息机制(四):子线程可以创建Handler吗
默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handle都是在ui线程进行的.这种情况属于子线程给 ...
- Handler消息机制(二):一个线程有几个Handler
在消息机制里面,有一个非常重要的东西,那就是Looper,Looper的作用主要是从消息队列里面取出消息交给Handler处理,不过不仅限于此,在这里面还有很多东西值得我们去源码看一看: 1.从Loo ...
最新文章
- DM***+EZ***
- R语言连接MySQL报错:could not run statement: The used command is not allowed with this MySQL version
- 类和对象—对象特性—静态成员函数
- codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)
- 使用Vue构建中(大)型应用
- Python 第三方模块之 pdfkit
- 4.线性和卷积——相关与卷积、卷积的属性、计算复杂度和可分性_2
- mybatis在oracle数据库中获取主键
- 利用MATLAB进行二次曲线方程的正交变换化简
- 【程序员日记】快乐的一周嘛(第8期)(财富、快乐、技术)
- dto转化 vo_VO(DTO)与PO(DAO)之间的转换
- 记一次疑难杂症-HTTP请求RST
- 无需Root也能使用Xposed!
- Java 获取某年的第一天和最后一天
- SQL INSERT INTO的用法
- Input标签type属性
- 串口服务器 linux,基于Linux的串口服务器设计与实现
- Windows 11 手机诞生,还是双屏的?
- 三极管(如NPN)集电极正偏 发射极反偏会怎么样呢? 电流会倒流吗? 其他三种都知道,就是不知道这种情况
- 【论文】优秀的论文记录
热门文章
- Log4j2日志框架集成Slf4j日志门面
- Java零基础入门 : (2) 代码编辑器IDEA安装与配置
- vue-cli4.0+Echarts 3D
- 【Spring学习】01
- Shell命令-系统信息及显示之dmesg、uptime
- 【鉴轻尘】BTC的暴跌的是因为BCH的分叉,但是你知道为什么?
- 90国央行齐聚华盛顿研讨区块链:“这一切意味着什么”
- Web表单美化CSS框架Topcoat
- 记录一则数据库连接故障ORA-12560,ORA-12518
- 国内域名商.wang总量统计TOP10:新网居亚 地位不稳