首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DeadLetterPublishingRecoverer和手动ack模式的Spring监听器

使用DeadLetterPublishingRecoverer和手动ack模式的Spring监听器
EN

Stack Overflow用户
提问于 2018-12-14 14:09:49
回答 2查看 3.6K关注 0票数 4

我很难理解如何解决这个问题,所以我在这里提出这个问题,希望其他人已经面临同样的问题。我们正在使用手动ack模式运行@KafkaListener,并运行一个死信恢复程序,其重试限制为3。由于业务逻辑,当给定某些情况(外部依赖关系)时,我们不会破坏消息并暂停5分钟,因此需要手动ack模式。

此外,我们确实需要死信队列来处理由于某些原因而不能处理的消息。

现在,手动ack模式的问题是,当侦听器/使用者到达重试限制并将其移动到dl队列时,他不会确认消息。

如果消费者服务将被重新启动,他将一次又一次地尝试使用这些消息,并将它们移动到dl队列中。

我们有什么办法解决这个问题吗?

感谢和问候汉堡!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-14 14:50:05

如果可能的话,我会尽量避免使用手动acks;也许可以通过增加max.poll.interval.ms来避免。

如果使用AckMode.MANUAL_IMMEDIATE,那么在错误处理程序中直接在Consumer上执行提交是安全的。

子类SeekToCurrentErrorHandler并重写handle(),如果super.handle()不抛出异常,这意味着超过重试,您可以在Consumer上提交偏移量。

票数 2
EN

Stack Overflow用户

发布于 2019-11-17 19:14:06

对于提供给commitRecovered的SeekToCurrentErrorHandler实例,可以将ContainerListenerFactory设置为true。

参考文献这里

公用空setCommitRecovered(布尔commitRecovered) 设置为true以提交恢复记录的偏移量。容器必须>用ContainerProperties.AckMode.MANUAL_IMMEDIATE配置。>commit是同步还是异步取决于容器的syncCommits属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53781327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档