死信队列
1.概念
DLX,全称为Dead-Letter-Exchange,可以称之为死信交换器,也有人称之为死信邮箱。当消息在一个队列中变成死信(dead message)之后,它能被重新被发送到另一个交换器中,这个交换器就是 DLX,绑定 DLX 的队列就称之为死信队列。
2.产生死信队列的原因
- 消息被拒绝(basic.reject或basic.nack)并且requeue=false.
- 消息TTL过期,即当前消息在队列中的存活时间已经超过了预先设置的TTL
- 队列达到最大长度(队列满了,无法再添加数据到mq中)
channel.exchangeDeclare("dlx_exchange","direct"); // 创建 DLX: dlx_exchange
Map<String, Object> map = new HashMap<String , Object>();
map.put ("x-dead-letter-exchange" ,"dlx_exchange");
// 为队列 myqueue 添加 DLX
channel.queueDeclare("myqueue", false, false, false, map);
- 设置TTL队列,需要在创建队列的时候,设置上一个属性
x-message-ttl
- 设置方式:
map.put("x-message-ttl", 10000);
小结
- 核心代码:
map.put("x-dead-letter-exchange", EXCHANGE_NAME_DLX);
一定要设置 ttl 队列的死信属性 - 死信队列就是一个普通的队列
- 应用场景:消息的延迟发送,定时关闭订单等。