学习死信队列,首先要理解死信产生的原因或条件:
-
消息被拒 (
basic.reject
orbasic.nack
) 并且没有重新入队 (requeue=false
); -
消息在队列中过期,即当前消息在队列中的存活时间已经超过了预先设置的
TTL
(Time To Live
) 时间; -
当前队列中的消息数量已经超过最大长度。
一旦消息
变成了死信
,那么消息
就会被送至死信
交换机,再路由至死信
队列。
Map<String, Object> argMap = new HashMap<>();
argMap.put("x-message-ttl", 30 * 1000); // 设置队列里消息的ttl的时间30s
argMap.put("x-dead-letter-exchange", dlxExchangeName); // 给队列设置死信交换机
设置队列是属性,①:队列中消息的过期时间是 30 秒 ②:队列产生的死信将会被转发至dlxExchangeName
交换机。
argMap.put("x-dead-letter-routing-key", "some-routing-key");
也可以指定死信路由的键。(若不指定,则使用原队列的routingKey
)