/**
* @Auther: Administrator
* @Date: 2019年7月16日
* @Description: 死信交换机 生产者首先发送一条携带路由键为 " dlx " 的消息,然后经过交换器
* exchange .normal 顺利地存储到队列 queue.normal 中 。由于队列 queue.normal 设置了过期时间为
* 10s , 在这 10s 内没有消费者消费这条消息,那么判定这条消息为过期。由于设置了 DLX , 过期
* 之时 , 消息被丢给交换器 exchange.dlx 中,这时找到与 exchange.dlx 匹配的队列 queue.dlx,最
* 后消息被存储在 queue.dlx 这个死信队列中。
*/
public class DLXProducer {
public static void main(String[] args) throws IOException, TimeoutException {
//创建连接
Connection connection = ConnectionUtils.getConnection();
//创建信道
Channel channel = connection.createChannel();
//定义普通的交换机
channel.exchangeDeclare("exchange.normal", "fanout", true);
Map<String, Object> map = new HashMap<String, Object>();
map.put("x-message-ttl", 10000);
//绑定死信交换交换机
map.put("x-dead-letter-exchange", "exchange.dlx");
// 这里的routingKey需要和死信队列的routingKey匹配
map.put("x-dead-letter-routing-key", "routingKey");
//普通的队列并绑定
channel.queueDeclare("queue.normal", true, false, false, map);
channel.queueBind("queue.normal", "exchange.normal", "rk");
//定义死信交换机
channel.exchangeDeclare("exchange.dlx", "direct", true);
//死信队列
channel.queueDeclare("queue.dlx", true, false, false, null);
channel.queueBind("queue.dlx", "exchange.dlx", "routingKey");
channel.basicPublish("exchange.normal", "rk", MessageProperties.PERSISTENT_TEXT_PLAIN, "死信队列测试2".getBytes());
System.out.println("消息发送成功");
channel.close();
connection.close();
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。