一、死信队列
DLX(Dead Letter Exchange),死信交换器。当队列中的消息被拒绝、或者过期会变成死信,死信可以被重新发布到另一个交换器,这个交换器就是DLX,与DLX绑定的队列称为死信队列。
造成死信的原因:
- 信息被拒绝
- 信息超时
- 超过了队列的最大长度
可以通过设置x-dead-letter-exchange参数指定DLX,设置x-dead-letter-routing-key指定DLX使用的路由键。
Map<String, Object> arg = new HashMap<String, Object>();
// 设置DLX
arg.put("x-dead-letter-exchange", "exchange.dlx");
// 设置DLX路由键,
arg.put("x-dead-letter-routing-key", "routingkey.dlx");
// 设置消息过期时间,消息过期后,会重新发布到DLX
arg.put("x-message-ttl", 5000);
channel.queueDeclare("queue.normal", true, false, false, arg);
代码实现:
public class DLX {
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.79.108");
factory.setPort(5672