【RabbitMQ的死信队列】

死信队列

什么是死信队列

  1. 消息被消费者确认拒绝。消费者把requeue参数设置为true(false),并且在消费后,向RabbitMQ返回拒绝。channel.basicReject或者channel.basicNack。
  2. 消息达到预设的TTL时限还一直没有被消费。TTL时长可能是制队列的本身特性,也可能是消息的特性。

可以通过配置策略的方式实现:
rabbitmqctl set_policy TTL ".*" '{"message-ttl":60000}' --apply-to queues
也可以通过创建队列的时候声明,java代码如下:

java 复制代码
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-message-ttl", 60000);
channel.queueDeclare("myqueue", false, false, false, args);
  1. 消息由于队列已经达到最长长度限制而被丢掉

死信队列的配置方式

RabbitMQ中有两种方式可以声明死信队列,一种是针对某个单独队列指定对应的死信交换机,这个交换机也要绑定队列。另一种就是以

策略的方式进行批量死信队列的配置。

通过代码的方式给队列声明死信交换机

java 复制代码
        Channel channel = openChannel();
        Map<String, Object> params = new HashMap<>();
        params.put("x-message-ttl", 60000);
        // 死信交换机的名称
        params.put("x-dead-letter-exchange", "deadletterexchange");
        // 死信队列的路由键
        params.put("x-dead-letter-routing-key", "dde");
        AMQP.Queue.DeclareOk declareOk = channel.queueDeclare(queueName, true, false, false, params);
        channel.queueBind(queueName,"test1","ddeorigin");

针对多个队列,可以使用策略方式,配置统一的死信队列。
rabbitmqctl set_policy DLX ".*" '{"dead-letter-exchange":"my-dlx"}' --apply-to queues

死信消息结构

相关推荐
JLWcai202510094 小时前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm
风吹夏回8 小时前
RabbitMQ 核心术语 + Python pika 方法完整讲解
分布式·python·rabbitmq
风吹夏回8 小时前
RabbitMQ 三种模式入门:HelloWorld、WorkQueue、PubSub
分布式·rabbitmq·ruby
霸道流氓气质9 小时前
分布式追踪与 RequestId 传播完全指南
分布式
cheems95279 小时前
[RabbitMQ高级特性] 消息确认机制:从 Ready / Unacked 到 basicAck、basicReject、basicNack 的底层拆解
分布式·rabbitmq·ruby
枫华落尽9 小时前
【Hadoop01-完全分布式运行模式】
分布式
隔壁阿布都9 小时前
ShedLock 分布式定时任务锁框架介绍
spring boot·分布式
文艺倾年10 小时前
【强化学习】数学推导专题,20W字总结(十五)
人工智能·分布式·大模型·强化学习·vibecoding
ACP广源盛1392462567310 小时前
GSV9001S@ACP#1080P 级视频处理芯片,物理 AI 普及终端的高性价比选择
大数据·人工智能·分布式·嵌入式硬件·spark
guslegend10 小时前
第1章:初始Kafka
分布式·kafka