RabbitMQ 死信/死信队列
2016-11-11 15:23
579 查看
摘要: RabbitMQ高可用系列之消费失败处理
DLX也叫死信邮箱(网上的译法),死信交换机(字面翻译)。归根结底就是一个交换机,当队列中出现死信时,通过这个交换机将死信重新发送到死信队列中(指定好rabbitmq会自动发送)。
消息被拒绝(basic.reject或basic.nack)并且requeue=false.
消息TTL过期
队列达到最大长度(队列满了,无法再添加数据到mq中)
]
DLX即死信交换机,DLK即死信路由键(routingKey)
DLX
Dead Letter Exchange 的缩写DLX也叫死信邮箱(网上的译法),死信交换机(字面翻译)。归根结底就是一个交换机,当队列中出现死信时,通过这个交换机将死信重新发送到死信队列中(指定好rabbitmq会自动发送)。
什么是死信
什么是死信呢?官方给出三个说法:消息被拒绝(basic.reject或basic.nack)并且requeue=false.
消息TTL过期
队列达到最大长度(队列满了,无法再添加数据到mq中)
什么是死信交换机
在定义业务队列的时候,要考虑指定一个死信交换机,死信交换机可以和任何一个普通的队列进行绑定,然后在业务队列出现死信的时候就会将数据发送到死信队列。什么是死信队列
死信队列实际上就是一个普通的队列,只是这个队列跟死信交换机进行了绑定,用来存放死信而已。如何使用死信交换机
#####定义业务(普通)队列的时候指定参数x-dead-letter-exchange: 用来设置死信后发送的交换机
x-dead-letter-routing-key:用来设置死信的routingKey
死信交换机图解
![![]
创建业务队列
@Bean public Queue mailQueue() { Map<String, Object> map = new HashMap<String, Object>(); map.put("x-dead-letter-exchange", "dead_letter_exchange");//设置死信交换机 map.put("x-dead-letter-routing-key", "mail_queue_fail");//设置死信routingKey Queue queue = new Queue("mailQueue",true, false, false, map); return queue; }
创建业务交换机
@Bean public DirectExchange mailExchange() { return new DirectExchange("mailExchange", true, false); }
绑定业务队列和交换机,指定routingKey
@Bean public Binding mailBinding() { return BindingBuilder.bind(mailQueue()).to(mailExchange()) .with(mailRoutingKey); }
创建死信队列
@Bean public Queue deadQueue(){ Queue queue = new Queue("dead", true); return queue; }
绑定死信队列和死信交换机
@Bean public Binding deadLetterBindding(){ return BindingBuilder.bind(deadLetterQueue()).to(deadLetterExchange()).with("mail_queue_fail"); }
查看创建后的队列和exchange
开始打算定义一个mailErrorQueue来记录消费失败的消息的,后来感觉不是特别方便,用RabbitMQ自带的死信邮件机制更好一些。DLX即死信交换机,DLK即死信路由键(routingKey)
测试数据进入死信队列
当我们消费的时候通过使用basic.reject和basic.nack即可,我这里使用的是reject。channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
相关文章推荐
- Rabbitmq消费失败死信队列
- RabbitMQ(六)使用Dead Letter(死信队列)进行延时发送
- Rabbitmq消费失败死信队列
- RabbitMQ之死信队列
- RabbitMQ 死信/死信队列
- rabbitmq AMQP 死信队列报错COMMAND_INVALID,PRECONDITION_FAILED
- rabbitmq 死信队列的使用方式
- RabbitMQ之镜像队列
- RabbitMQ与Redis队列对比
- RabbitMQ3.7.2入门到进阶之工作队列消息应答ack与消息持久化durable
- 【译】RabbitMQ:工作队列(Work Queue)
- WebSphere MQ入门教程(27):MQ死信队列、配置、跟踪
- 详解Python操作RabbitMQ服务器消息队列的远程结果返回
- CentOS下的rabbitMQ集群安装,高并发消息队列中间件(何志雄)
- (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
- 消息队列RabbitMQ使用教程收集
- RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)
- centos安装rabbitmq消息队列
- 学渣讲消息队列之RabbitMQ从敲门到入门(第五讲)—— "Routing"
- RabbitMQ消息队列(六):使用主题进行消息分发