Replies: 1 comment 5 replies
-
changeInvisibleDuration 并不是修改当前获取到的消息的到期时间,而是将这一批消息认为消费失败,经过不可见时间(15s)后再次对消费者可见,实际上在你续期操作的15s后,这些消息应该就能被再次拉到了 |
Beta Was this translation helpful? Give feedback.
5 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
服务端:rocketMQ 5.1.1
客户端:rocketmq-client-java 5.0.5
自己打算基于SimpleConsumer封装一个通用方法,程序可以自动调用
changeInvisibleDuration
延长消息不可见时间。但是测试过程中,changeInvisibleDuration
并不能总是生效。首先使用
SimpleConsumer.receive
批量获取消息集合,计算出消息的最终不可见时间;然后使用线程池异步消费这些消息。
另外还有个监测线程,每隔1秒检查消息集合中元素,如果当前时间临近消息的不可见时间,就会调用
SimpleConsumer.changeInvisibleDuration
再次续上时间,重复此步骤。这是打印的日志:
[1]是获取到消息的时间与数量,共15条;
[2] 12:24:41 是消息最终不可见时间;(设置时间15s)
[3]~[9]消费消息;
[10]~[25]监测线程打印。其中[17]~[24]检查出来,需要续期,续期后的不可见时间为:12:24:56。
[25]监测线程结束时间:12:24:38,明显小于[2]-12:24:41,也就是说此时[17]~[24]
未超时未提交消费状态
。[26]~[33] 消息正式消费;消费时间,小于续期之后的 12:24:56;
[34]~[37]第二轮开始,但是仍然获取到[29]、[26]这2条消息。
如果续期失败,第二轮应该会再次获取[28]~[33]6条消息,但是实际上第二轮只有2条。
感觉
changeInvisibleDuration
有用,但是又没完全有用。Beta Was this translation helpful? Give feedback.
All reactions