ps个人网站,黄埔做网站的公司,页面设计公司在哪里,无网站营销接上文 RabbitMQ-java使用消息队列
1 死信队列简介 死信队列模式实际上本质是一个死信交换机绑定的死信队列#xff0c;当正常队列的消息被判定为死信时#xff0c;会被发送到对应的死信交换机#xff0c;然后再通过交换机发送到死信队列中#xff0c;死信队列也有对应的消…接上文 RabbitMQ-java使用消息队列
1 死信队列简介 死信队列模式实际上本质是一个死信交换机绑定的死信队列当正常队列的消息被判定为死信时会被发送到对应的死信交换机然后再通过交换机发送到死信队列中死信队列也有对应的消费者去处理消息。 1.1 测试第一种消息被拒绝 直接在配置类中创建一个新的死信交换机和死信队列并进行绑定 Configuration
public class RabbitConfiguration {Bean(directDlExchange)public Exchange dlExchange(){//创建一个新的死信交换机return ExchangeBuilder.directExchange(dlx.direct).build();}Bean(yydsDlQueue) //创建一个新的死信队列public Queue dlQueue(){return QueueBuilder.nonDurable(dl-yyds).build();}Bean(dlBinding) //死信交换机和死信队列进绑定public Binding dlBinding(Qualifier(directDlExchange) Exchange exchange,Qualifier(yydsDlQueue) Queue queue){return BindingBuilder.bind(queue).to(exchange).with(dl-yyds).noargs();}...Bean(yydsQueue)public Queue queue(){return QueueBuilder.nonDurable(yyds).deadLetterExchange(dlx.direct) //指定死信交换机.deadLetterRoutingKey(dl-yyds) //指定死信RoutingKey.build();}...
}删除rabbitmq管理页面的队列关之前把springboot的application启动类关闭否则删除完队列马上又创建新的队列 定义死信队列监听 Component
public class TestListener {RabbitListener(queues dl-yyds, messageConverter jacksonConverter)public void receiver(User user){System.out.println(user);}
}启动服务器application。进入rabbitmq网页管理端可以看到出现两个队列。 查看交换机 查看dlx.direct交换机详情 向amq.direct交换机发送消息{id:1,name:LB} 此时yyds队列出现一条消息 将消息拒绝使其变为死信消息。 此时死信队列监听到拒绝的信息 1.1 测试第二种消息TTL过期 RabbitMQ支持将超过一定时间没被消费的消息自动删除这需要消息队列设定TTL值若消息的存活时间超过了Time To Live值则会被自动删除自动删除后的消息若有死信队列则会进入死信队列。 给yyds队列设定TTL值毫秒为单位先把服务器关闭然后删除队列yyds 启动服务然后在amq.direct交换机详情发送消息{id:1,name:LB} 不进行处理5s后死信队列会监听到消息 1.1 测试第三种队列达到最大长度 关闭服务删除yyds在配置类添加参数然后启动服务 同样在amq.direct交换机发送消息发送三次消息分别为{id:1,name:LB}{id:2,name:LB}{id:3,name:LB} 此时消息队列3条消息 此时死信队列未监听到数据 然后再发送一条{id:4,name:LB} 然后发现死信队列监听器监听到消息此时第四条消息把第一条挤出去了。 此时yyds队列还剩下三条消息