【问题标题】:Modify ack deadline in asynchronous subscriber修改异步订阅者的确认截止日期
【发布时间】:2018-03-10 18:07:48
【问题描述】:

我目前切换到 google-cloud-pubsub 库的 0.24.0-beta 版本,但找不到修改消息确认截止日期的方法。在以前的版本中有一个modifyAckDeadline(),它允许我这样做。新版本可以吗?

了解我为什么要尝试它:我想要实现的是一种重试机制,其中无法处理的消息在 10 分钟内重新传递,并且仅在 X 次这样不成功的重试后才确认。

【问题讨论】:

    标签: java google-cloud-pubsub


    【解决方案1】:

    为了保持消息的租约,因为它需要更长的处理时间,新版本的订阅者库会在后台为您调用 modifyAckDeadline。只要消息未完成,即您没有在 MessageReceiver 收到的消息中调用 AckReplyConsumer 上的 ack() 或 nack(),库本身就会在消息上调用 modifyAckDeadline。

    您的目标有点不同:您想使用 modifyAckDeadline 来尽最大努力防止消息重新传递一段时间。如果您要等待的时间总是 10 分钟,那么最好在创建订阅者时在 Subscriber.Builder 上拨打持续时间为 10 分钟的 setMaxAckExtensionPeriod()。然后,当您无法处理消息时,不要 ack 或 nack 消息。客户端库会继续修改AckDeadline十分钟,之后可以重新投递消息。

    【讨论】:

    • 谢谢,在订阅中的消息超过 500 条之前,这非常有效。当有 5 个时,订阅者收到 5​​ 个然后挂起并且没有更多要处理的。当有 600 条消息时,订阅者收到 600 条消息,而不是挂起等待,一些消息会立即重新传递,其中一些消息不止一次。每次运行都会处理不同数量的消息 - 840、1220、1170,而不是 600。
    猜你喜欢
    • 2019-07-27
    • 2017-06-22
    • 2021-09-14
    • 2013-10-09
    • 2019-06-23
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多