Rabbitmq消费失败死信队列

Rabbitmq 重消费处理

一 处理流程图:
这里写图片描述
业务交换机:正常接收发送者,发送过来的消息,交换机类型topic

AE交换机: 当业务交换机无法根据指定的routingkey去路由到队列的时候,会全部发送到AE交换机.发送到此队列的消息属于,业务垃圾消息,或者攻击消息类型,交换机类型fanout

死信交换机:用于处理消费者,消费失败回退的消息,根据死信交换机的routingkey发送到死信队列,交换机类型 topic
EXAMPLE:
业务routingkey: hello/task_queue
生产者发送routingkey: hello task_queue michael
最后业务交换机根据routingkey 会把匹配 hello 和task_queue的发送到业务队列1和业务队列2,michael routingkey没匹配,直接发送到AE交换机,AE交换机的类型为fanout,直接到了告警队列里面,这时候就说明,生产者有问题,或者有一些非法生产者在猜测routingkey,这时候就可以告警处理.
当正常的消息到了业务队列后,消费者监听这个队列进行处理,在消费者处理的过程中,难免会有一些消息处理失败,因为业务的种种原因,但是这些消息一旦失败,那么就会影响性能和后面的消息的消费,这时候就需要一个死信队列,来存放这个消费不了的消息,进入死信队列后,在进行其他处理.
消息消费失败处理方式:
一 进入死信队列(进入死信的三种方式)
1.消息被拒绝(basic.reject or basic.nack)并且requeue=false
2.消息TTL过期
3.队列达到最大长度
二 重新发布此消息到对应的队列(low)

二 处理案例

基础设置:
业务交换机设置:
设置AE交换机为alter
绑定routingkey到对应的队列
这里写图片描述
AE交换机设置,设置为internal,表示内部EXchange到EXchange,绑定需要接受的队列alter_message
这里写图片描述
三个队列都属于常规的队列,其中task_queue业务比较重要,当消费者消费失败的时候要回退到死信队列在进行处理!
这里写图片描述
Task_queue设置
设置:x-dead-letter-exchange 指定死信送往的交换机
设置:x-dead-letter-routing-key 指定死信的routingkey
(我在消费者处理失败的时候已经修改好了routingkey)
这里写图片描述
死信队列设置:因为是队列到exchange的所以不能把交换机设置成internal,设置匹配的routingkey,表示消费失败的消息队列,最好可以一眼看出,是什么队列消费失败,所以我这里设置了queue_name.fail
这里写图片描述
下面开始消息发送和观察现象:
我定义发送的消息和routingkey是一致的,这里我发送了三条消息,其中有两条设置了routingkey,另外一条没做routingkey.
这里写图片描述
可以看到匹配到routingkey的消息已经进入到了匹配的队列,没有匹配到的消息也就是michael,直接进入了告警队列.
这里写图片描述

我这里打印的信息很多,但是可以看到hello这条消息时成功的被获取到和被消费掉了.
这里写图片描述
针对task_queue我做了特殊处理,匹配到了消息时task_queue就直接进入到死信队列里面,在程序里面消费的时候,可以捕获expection 然后进行退信处理.我这里用的是basic.reject和requeue=false进行处理的!
这里写图片描述
进过处理后可以看到task_queue的消息已经进入到了死亡队列里面,这样对于消费失败的消息,存放死信队列就成功了,
这里写图片描述
下面就是进入死信队列的消息,可以看到routingkey已经按照我们设置的
还有queue从哪个队列进来的和原始的routingkey还有一个就是reason表明消息时rejected.

这里写图片描述
可以看到在警告队里里面的消息michael.
这里写图片描述

所有所设置的功能已经实现! 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值