rabbitmq

死信队列

2020-11-19  本文已影响0人  于情于你

概念

    DLX,全称为Dead-Letter-Exchange,可以称之为死信交换器,也有人称之为死信邮箱。当消息在一个队列中变成死信(dead message)之后,它能被重新被发送到另一个交换器中,这个交换器就是 DLX,绑定 DLX 的队列就称之为死信队列。

消息变成死信的时机

添加DLX

channel.exchangeDeclare("dlx_exchange","direct"); // 创建 DLX: dlx_exchange
Map<String, Object> args = new HashMap<String , Object>();
args.put ("x-dead-letter-exchange" ,"dlx_exchange");
// 为队列 myqueue 添加 DLX
channel.queueDeclare("myqueue", false, false, false, args);

    如果不给这个DLX指定路由键,就使用原队列的路由键。

args.put("x-dead-letter-routing-key" ,"dlx-routing-key");
image.png

    在Web界面中D是持久化,DLX是配置了死信队列,DLK是配置配置了x-dead-letter-routing-key属性。

流程

image.png

    生产者首先发送一条携带路由键为"rk"的消息,然后经过交换器exchange.normal 顺利地存储到队列queue.normal 中。由于队列queue.normal 设置了过期时间为10s,在这 10s内没有消费者消费这条消息,那么判定这条消息为过期。由于设置了DLX,过期之时,消息被丢给交换器 exchange.dlx 中,这时找到与 exchange.dlx 匹配的队列queue.dlx,最后消息被存储在 queue.dlx 这个死信队列中。

上一篇 下一篇

猜你喜欢

热点阅读