Return Listener 用于处理一些不可路由的消息!

  1. 我们的消息生产者,通过指定一个Exchang 和 RoutingKey , 把 消息送达到某一个队列中去,然后我们的消费者监听队列,进行消费处理操作!
  2. 但是在某些情况下,如果我们在发送消息的时候,当前的Exchange不存在或者指定的路由key路由不到,这个时候如果我们需要监听这种不可达的消息,就要使用Return Listener!

Return 消息机制

  1. 在基础API中有一个关键的配置项:
  2. Mandatory:
  3. 如果为true,则监听器会接收到路由不可达的消息,然后进行后续处理,
  4. 如果为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 消息机制相关推荐

  1. android return 如何跳出两个循环_关于不得不学的Android知识之消息机制

    概述 相信不管是出入Android,还是已开发多年的老司机们,肯定都对Android的Handler不会陌生,而它就是今天要介绍的Android消息机制中的一部分.在Android系统中,有两大特色利 ...

  2. Android消息机制学习笔记

    Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑: MessageQueue:消息队列,它的内存存储了一组消息,以队 ...

  3. iOS开发系列--通知与消息机制

    http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣 ...

  4. Android消息机制Handler用法

    这篇文章介绍了Android消息机制Handler用法总结,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 1.简述 Handler消息机制主要包括: Messa ...

  5. Android异步消息机制

    2019独角兽企业重金招聘Python工程师标准>>> 目录介绍 1.Handler的常见的使用方式 2.如何在子线程中定义Handler 3.主线程如何自动调用Looper.pre ...

  6. windows程序消息机制(Winform界面更新有关)--转

    1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队 ...

  7. Android:Handler的消息机制

    前言 Android 的消息机制原理是Android进阶必学知识点之一,在Android面试也是常问问题之一.在Android中,子线程是不能直接操作View,需要切换到主线程进行.那么这个切换动作就 ...

  8. Handler消息机制(四):子线程可以创建Handler吗

    默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handle都是在ui线程进行的.这种情况属于子线程给 ...

  9. Handler消息机制(二):一个线程有几个Handler

    在消息机制里面,有一个非常重要的东西,那就是Looper,Looper的作用主要是从消息队列里面取出消息交给Handler处理,不过不仅限于此,在这里面还有很多东西值得我们去源码看一看: 1.从Loo ...

最新文章

  1. DM***+EZ***
  2. R语言连接MySQL报错:could not run statement: The used command is not allowed with this MySQL version
  3. 类和对象—对象特性—静态成员函数
  4. codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)
  5. 使用Vue构建中(大)型应用
  6. Python 第三方模块之 pdfkit
  7. 4.线性和卷积——相关与卷积、卷积的属性、计算复杂度和可分性_2
  8. mybatis在oracle数据库中获取主键
  9. 利用MATLAB进行二次曲线方程的正交变换化简
  10. 【程序员日记】快乐的一周嘛(第8期)(财富、快乐、技术)
  11. dto转化 vo_VO(DTO)与PO(DAO)之间的转换
  12. 记一次疑难杂症-HTTP请求RST
  13. 无需Root也能使用Xposed!
  14. Java 获取某年的第一天和最后一天
  15. SQL INSERT INTO的用法
  16. Input标签type属性
  17. 串口服务器 linux,基于Linux的串口服务器设计与实现
  18. Windows 11 手机诞生,还是双屏的?
  19. 三极管(如NPN)集电极正偏 发射极反偏会怎么样呢? 电流会倒流吗? 其他三种都知道,就是不知道这种情况
  20. 【论文】优秀的论文记录

热门文章

  1. Log4j2日志框架集成Slf4j日志门面
  2. Java零基础入门 : (2) 代码编辑器IDEA安装与配置
  3. vue-cli4.0+Echarts 3D
  4. 【Spring学习】01
  5. Shell命令-系统信息及显示之dmesg、uptime
  6. 【鉴轻尘】BTC的暴跌的是因为BCH的分叉,但是你知道为什么?
  7. 90国央行齐聚华盛顿研讨区块链:“这一切意味着什么”
  8. Web表单美化CSS框架Topcoat
  9. 记录一则数据库连接故障ORA-12560,ORA-12518
  10. 国内域名商.wang总量统计TOP10:新网居亚 地位不稳