![](/img/trans.png)
[英]Spring Cloud Stream: @StreamListener processing messages twice
[英]Spring Cloud Stream: Proper handling for StreamListener when it takes a long time to process the message
当StreamListener花费很长时间(比max.poll.interval.ms
更长)来处理一条消息时,该特定使用者将被占用,并且其他新消息将分配给其他分区。 时间大于max.poll.interval.ms
,发生了重新平衡,另一个用户也会遇到相同的情况。 因此,该消息将在所有分区中传播,并继续占用资源。
但是,这种情况并不经常发生,只有几条消息以某种方式花费了很长时间才能处理,并且这是无法控制的。
经过几次重新平衡后,我们可以提交偏移量并将其扔给DLQ吗? 如果是,我们该怎么做? 如果没有,那么这种情况的正确处理方法是什么?
增加max.poll.interval.ms
不会对性能产生任何影响(除非检测到真正死亡的使用者需要更长的时间)。
每次处理此“不良”记录时都要进行重新平衡,这会对性能造成更大的损害。
但是,您可以使用自定义SeekToCurrentErrorHandler
以及诸如DeadLetterPublishingRecoverer
类的恢复器来完成所需的操作 。 您还需要一个重新平衡侦听器来计算重新平衡,并需要一些机制来在实例之间共享来自错误处理程序的状态(标准的仅将状态保存在内存中)。
我认为这很复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.