死信队列的简单介绍

利用dlx,当消息在一个队列中变成死信之后,它能被重新publish到另一个exchange,这个exchange就是dlx
消息变成死信的以下几种情况
消息被拒绝,并且requeue= false
消息ttl过期
队列达到最大的长度
dlx也是一个正常的exchange,和一般的exchange没什么区别,它能在任何的队列上被指定,实际上就是设置某个队列的属性。
当这个队列中有死信时,rabbitmq就会自动的将这个消息重新发布到设置的exchange上,进而被路由到另一个队列。
可以监听这个队列中消息做相应的处理,这个特性可以弥补rabbitMq3.0以前支持的immediate参数的功能。

消费端:

package com.flying.rabbitmq.api.dlx;import java.util.HashMap;
import java.util.Map;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("192.168.11.76");connectionFactory.setPort(5672);connectionFactory.setVirtualHost("/");Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();// 这就是一个普通的交换机 和 队列 以及路由String exchangeName = "test_dlx_exchange";String routingKey = "dlx.#";String queueName = "test_dlx_queue";channel.exchangeDeclare(exchangeName, "topic", true, false, null);Map<String, Object> agruments = new HashMap<String, Object>();agruments.put("x-dead-letter-exchange", "dlx.exchange");//这个agruments属性,要设置到声明队列上channel.queueDeclare(queueName, true, false, false, agruments);channel.queueBind(queueName, exchangeName, routingKey);//要进行死信队列的声明:channel.exchangeDeclare("dlx.exchange", "topic", true, false, null);channel.queueDeclare("dlx.queue", true, false, false, null);channel.queueBind("dlx.queue", "dlx.exchange", "#");channel.basicConsume(queueName, true, new MyConsumer(channel));}
}

自定义消费端:

package com.flying.rabbitmq.api.dlx;import java.io.IOException;import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;public class MyConsumer extends DefaultConsumer {public MyConsumer(Channel channel) {super(channel);}@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.err.println("-----------consume message----------");System.err.println("consumerTag: " + consumerTag);System.err.println("envelope: " + envelope);System.err.println("properties: " + properties);System.err.println("body: " + new String(body));}}

生产端:

package com.flying.rabbitmq.api.dlx;import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class Producer {public static void main(String[] args) throws Exception {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost("192.168.11.76");connectionFactory.setPort(5672);connectionFactory.setVirtualHost("/");Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();String exchange = "test_dlx_exchange";String routingKey = "dlx.save";String msg = "Hello RabbitMQ DLX Message";for(int i =0; i<1; i ++){AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder().deliveryMode(2).contentEncoding("UTF-8").expiration("10000").build();channel.basicPublish(exchange, routingKey, true, properties, msg.getBytes());}}
}

转载于:https://www.cnblogs.com/lflying/p/11107435.html

RabbitMQ 死信队列DLX相关推荐

  1. RabbitMQ - 死信队列(DLX)

    RabbitMQ - 死信队列(DLX) 配置死信队列 方式1 - RabbitMQ 管理后台配置死信队列 方式2 - 代码创建死信队列 验证 满足死信队列的条件 死信队列只是一个概念,本质就是普通的 ...

  2. RabbitMQ高级特性(五):RabbitMQ之死信队列DLX

    一.死信队列简介 (1)死信队列 死信队列,英文缩写:DLX .Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就 ...

  3. 消息中间件--RabbitMQ --死信队列

    https://blog.csdn.net/u012211603/article/details/85707760 介绍一些概念 1.首先是任何的MQ中,都有死信队列的存在 2.RabbitMQ的死信 ...

  4. Springboot——死信队列 DLX 配置和使用

    文章目录 前言 什么是死信 配置和测试死信 思路分析 配置类编写 编写消息发送服务 测试 消息什么时候会成为死信消息? 总结 参考资料 代码下载 前言 上一篇博客 Springboot--整合Rabb ...

  5. Rabbitmq死信队列

    目录 1.什么是死信队列 2.产生死信队列的原因 3.代码实现---直连交换机 3.1.导入依赖 3.2.配置rabbitmq连接信息 3.3.编写配置类 3.4.编写生产者 3.5.编写消费者 3. ...

  6. rabbitmq死信队列详解与使用

    关注架构师高级俱乐部 开启架构之路 不定期福利发放哦~ 什么是死信队列 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到b ...

  7. RabbitMQ死信队列应用

    目录 1.什么是死信队列 2.死信队列应用场景 3.延迟消息概念 3.1 消息的TTL(Time To Live) 3.2 死信交换器 3.3 延时队列 4.死信队列使用流程图 5.死信队列应用(管理 ...

  8. 【分布式】Rabbitmq死信队列模型、实战场景---订单延迟30min支付处理

    分布式 内容管理 死信队列 死信队列demo 死信队列消息模型 平台订单支付超时 --- 演示 业务分析 代码实现 RabbitMQ 死信队列/ 延迟队列 - 延迟业务逻辑 最近可能分布式进入Redi ...

  9. Java秒杀系统实战系列~RabbitMQ死信队列处理超时未支付的订单(转)

    转自: https://juejin.cn/post/6844903903130042376 文末有源代码,非常棒 摘要: 本篇博文是"Java秒杀系统实战系列文章"的第十篇,本篇 ...

最新文章

  1. 剑指offer:二叉树镜像
  2. Shell教程(六):函数、联机帮助
  3. Direct2D (11) : 画刷之 ID2D1LinearGradientBrush
  4. 疫情伤了谁?反正不是这8大直播行业
  5. nginx+php+mysql+erlang+mongo环境安装
  6. [Codeforces700E Cool Slogans]
  7. java开发和structs的关系_java---springMVC与strutsMVC的区别
  8. 第五章 使用 Bootstrap Typeahead 组件(百度下拉效果)
  9. [Axios] axios的请求合并以及参数配置
  10. Ethos北京公司(来自北欧的IT咨询公司)求贤若渴:.NET架构师
  11. vue_axios请求封装、异常拦截统一处理
  12. Google GPS在Android上的一些应用
  13. pands 画图 调整大小_两个精品案例解释机械设计的步骤,有思路,再着手画图...
  14. 在线加密视频一机一码播放器
  15. 打字游戏之主界面实现
  16. 使用ZED相机识别颜色醒目的水壶并计算与相机的距离
  17. Linux SPI驱动学习——调用SPI读写函数
  18. using Aspose文档合并总结
  19. 马云的“平头哥”芯片公司,会比董明珠的格力芯片厉害吗?
  20. 2017 后端面试经历分享

热门文章

  1. 2.6 基于ARDUINO UNO+MC20的路径显示功能
  2. 360webscan.php 使用,【漏洞练习-Day15】360webscan 使用$_SERVER['PHP_SELF']不当
  3. 亲测好用的开发工具【1】 RuoYi-MT
  4. Android之软键盘自动弹出和关闭
  5. 【日志检索系统ELK搭建】
  6. JQuery 遍历数组 或者JSON
  7. 端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口
  8. easyui datagrid 页码设置
  9. 支付宝小程序选择手机本地视频
  10. Linux文件MD5校验