【发布时间】:2018-03-10 18:07:48
【问题描述】:
我目前切换到 google-cloud-pubsub 库的 0.24.0-beta 版本,但找不到修改消息确认截止日期的方法。在以前的版本中有一个modifyAckDeadline(),它允许我这样做。新版本可以吗?
了解我为什么要尝试它:我想要实现的是一种重试机制,其中无法处理的消息在 10 分钟内重新传递,并且仅在 X 次这样不成功的重试后才确认。
【问题讨论】:
我目前切换到 google-cloud-pubsub 库的 0.24.0-beta 版本,但找不到修改消息确认截止日期的方法。在以前的版本中有一个modifyAckDeadline(),它允许我这样做。新版本可以吗?
了解我为什么要尝试它:我想要实现的是一种重试机制,其中无法处理的消息在 10 分钟内重新传递,并且仅在 X 次这样不成功的重试后才确认。
【问题讨论】:
为了保持消息的租约,因为它需要更长的处理时间,新版本的订阅者库会在后台为您调用 modifyAckDeadline。只要消息未完成,即您没有在 MessageReceiver 收到的消息中调用 AckReplyConsumer 上的 ack() 或 nack(),库本身就会在消息上调用 modifyAckDeadline。
您的目标有点不同:您想使用 modifyAckDeadline 来尽最大努力防止消息重新传递一段时间。如果您要等待的时间总是 10 分钟,那么最好在创建订阅者时在 Subscriber.Builder 上拨打持续时间为 10 分钟的 setMaxAckExtensionPeriod()。然后,当您无法处理消息时,不要 ack 或 nack 消息。客户端库会继续修改AckDeadline十分钟,之后可以重新投递消息。
【讨论】: