请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

在消费端设置手动Ack

https://img1.sycdn.imooc.com//szimg/5b77e703000145c215340682.jpg

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

https://img1.sycdn.imooc.com//szimg/5b77e7270001ca1415630832.jpg

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

https://img1.sycdn.imooc.com//szimg/5b77e77a0001e25f16140804.jpg

生产端配置

https://img1.sycdn.imooc.com//szimg/5b77e7d00001e03617180505.jpg

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

正在回答

4回答

阿神 2018-08-20 00:05:27

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

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_哈之仆_0 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-08-20 18:55:56
阿神 2018-08-20 18:59:21

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

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_哈之仆_0 #1
    消费失败再回到死信队列,记录重试次数,超过一定次数就人工补偿,这样可以吗?
    回复 有任何疑惑可以回复我~ 2018-08-20 20:53:06
  • 阿神 回复 提问者 qq_哈之仆_0 #2
    这个机制可以自己定
    回复 有任何疑惑可以回复我~ 2018-08-20 21:54:44
提问者 qq_哈之仆_0 2018-08-18 18:10:23

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

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

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

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

0 回复 有任何疑惑可以回复我~
提问者 qq_哈之仆_0 2018-08-18 17:38:38

附加一下我的理解

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

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

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

0 回复 有任何疑惑可以回复我~
  • 阿神 #1
    如果走死信队列失败后,那么走人工补偿
    回复 有任何疑惑可以回复我~ 2018-08-20 18:59:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信