Pulsar是否会出现重复消费的问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1220个文字,预计阅读时间需要5分钟。
背景:许久没有分享,Java相关的疑问排查了,最近帮同事一起排查了一个问题:在使用Pulsar消费时,发生了同一条消息重复消费的情况。
排查:当他告诉我这个现象时,我一开始也持有怀疑态度。
背景许久没有分享 Java 相关的问题排查了,最近帮同事一起排查了一个问题:
排查在使用
Pulsar消费时,发生了同一条消息反复消费的情况。
当他告诉我这个现象的时候我就持怀疑态度,根据之前使用的经验 Pulsar 在官方文档以及 API 中都解释过:
只有当设置了消费的 ackTimeout 并超时消费时才会重复投递消息,默认情况下是关闭的,查看代码也确实没有开启。
那会不会是调用了 negativeAcknowledge() 方法呢(调用该方法也会触发重新投递),因为我们使了一个第三方库 github.com/majusko/pulsar-java-spring-boot-starter 只有当抛出异常时才会调用该方法。
查阅代码之后也没有地方抛出异常,甚至整个过程中都没看到异常产生;这就有点诡异了。
复现为了捋清楚整个事情的来龙去脉,详细了解了他的使用流程;
其实也就是业务出现了 bug,他在消息消费时 debug 然后进行单步调试,当走完一次调试后,没多久马上又收到了同样的消息。
但奇怪的是也不是每次 debug 后都能重复消费,我们都说如果一个 bug 能 100% 完全复现,那基本上就解决一大半了。
本文共计1220个文字,预计阅读时间需要5分钟。
背景:许久没有分享,Java相关的疑问排查了,最近帮同事一起排查了一个问题:在使用Pulsar消费时,发生了同一条消息重复消费的情况。
排查:当他告诉我这个现象时,我一开始也持有怀疑态度。
背景许久没有分享 Java 相关的问题排查了,最近帮同事一起排查了一个问题:
排查在使用
Pulsar消费时,发生了同一条消息反复消费的情况。
当他告诉我这个现象的时候我就持怀疑态度,根据之前使用的经验 Pulsar 在官方文档以及 API 中都解释过:
只有当设置了消费的 ackTimeout 并超时消费时才会重复投递消息,默认情况下是关闭的,查看代码也确实没有开启。
那会不会是调用了 negativeAcknowledge() 方法呢(调用该方法也会触发重新投递),因为我们使了一个第三方库 github.com/majusko/pulsar-java-spring-boot-starter 只有当抛出异常时才会调用该方法。
查阅代码之后也没有地方抛出异常,甚至整个过程中都没看到异常产生;这就有点诡异了。
复现为了捋清楚整个事情的来龙去脉,详细了解了他的使用流程;
其实也就是业务出现了 bug,他在消息消费时 debug 然后进行单步调试,当走完一次调试后,没多久马上又收到了同样的消息。
但奇怪的是也不是每次 debug 后都能重复消费,我们都说如果一个 bug 能 100% 完全复现,那基本上就解决一大半了。

