怎样在消费端根据业务控制Ack,使生产端进行消息重发

来源:4-14 RabbitMQ与SpringBoot2.0整合实战-2

qq_哈之仆_0

2018-08-18

在消费端设置手动Ack

http://img.mukewang.com/szimg/5b77e703000145c215340682.jpg

然后在消费端进行手动签收,Ack、NAck、Reject都试过

http://img.mukewang.com/szimg/5b77e7270001ca1415630832.jpg

在生产端设置 Confirm监听与 Return 监听,其中,不管消费端是Ack、NAck、Reject,Confirm中 ack 都收到的true,Return监听则没有触发

http://img.mukewang.com/szimg/5b77e77a0001e25f16140804.jpg

生产端配置

http://img.mukewang.com/szimg/5b77e7d00001e03617180505.jpg

想问的问题是,怎样在消费端根据业务控制Ack,使生产端进行消息重发

写回答

4回答

阿神

2018-08-20

nack是要配合死信队列的,或者要设置超时时间,reject表示拒绝消费

0
1
qq_哈之仆_0
非常感谢!
2018-08-20
共1条回复

阿神

2018-08-20

如果进入死信队列的消息,消费失败就做人工补偿

0
2
阿神
回复
qq_哈之仆_0
这个机制可以自己定
2018-08-20
共2条回复

qq_哈之仆_0

提问者

2018-08-18

刚才进行了下测试,证实了,如果进行NAck,就会进入绑定的死信队列。

那么从逻辑上应该可以给死信队列设置一个过期时间,过期了导向下一个处理的队列A,然后A进行处理。

如果A处理又失败,又从A导给死信队列,继续循环,然后设置一个次数限制,这样就算是一个简单的重试机制了。

@讲师-阿神,不知道实际生产环境上是不是也是这么做的。

0
0

qq_哈之仆_0

提问者

2018-08-18

附加一下我的理解

通过课程学习,我认为 ConfirmListener 中的 ack 表示消息是否成功到达消息中间件,ReturnListener 监听消息在消息中间件中有没有找到对应的 Queue。

一开始猜测设置了手工签收的话,可以在业务端进行拒签,然后神铲断的 ConfirmListener 中 ack 会为false,然后生产端可以选择重新发消息。

但是经过实践发现好像不行,那是不是进行 NAck 或者 Reject,消息会进入对应的死信队列???

0
1
阿神
如果走死信队列失败后,那么走人工补偿
2018-08-20
共1条回复

RabbitMQ精讲 从0到1驾驭RabbitMQ应用与设计

从0到1,全面深入掌握RabbitMQ消息中间件技术

1460 学习 · 443 问题

查看课程