死信队列

作者: 于情于你 | 来源:发表于2020-11-19 20:20 被阅读0次

概念

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

消息变成死信的时机

  • 消息被拒绝(Basic.Reject/Basic.Nack),并且设置requeue参数为false;
  • 消息过期;
  • 队列达到最大长度。

添加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 这个死信队列中。

相关文章

网友评论

    本文标题:死信队列

    本文链接:https://www.haomeiwen.com/subject/mdwliktx.html