【问题标题】:Googlr PubSub Request messages even if acknowledged?Google PubSub Request 消息即使确认?
【发布时间】:2021-06-18 15:35:39
【问题描述】:

我正在接收来自我创建的订阅的消息:

subscriber = pubsub_v1.SubscriberClient(credentials=credentials)
subscriber.create_subscription(name=subscription_name,topic=topic_name, ack_deadline_seconds=60)

我正在使用这个来接收:

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_id)
future = subscriber.subscribe(subscription_path, callback=callback())

with subscriber:
    try:
        future.result()
    except TimeoutError:
        future.cancel()

def callback(msg):
    my_logic(msg)
    msg.ack()

虽然我在回调结束时承认我错过了来自发布者的前约 600 条消息(订阅存在)。我认为他们没有收到,但由于最小化的日志记录,我无法确认。无论如何,我需要恢复这些消息。

我读了这个页面:

https://cloud.google.com/pubsub/docs/replay-overview

不幸的是我的订阅没有设置retain_acked_messages=true

我有两个问题:

  1. 检索这些丢失消息的最简单方法是什么?我知道他们会发生的时间段。是否可以指示服务使用时间戳重播它们?

  2. 我应该对我的订阅进行任何更改以应对未来的问题吗?我应该在启动时创建快照吗?

【问题讨论】:

    标签: python google-cloud-platform google-cloud-pubsub


    【解决方案1】:

    如果您不保留已确认的消息,则无法寻求您的 PubSub 订阅并重播过去的确认消息。

    快照很棒,尤其是对于测试(可重播性)或在生产中发布新版本之前(发生错误时回滚)。

    IMO,retain_acked_messages 在您的情况下激活很重要。如果您的用例是重播已确认的消息,则当您拥有此参数时,快照的用处不大。

    【讨论】:

    • 感谢您的回答。我将消息存储到数据库超过一周(一周后是一个新系列),我需要确保我不会错过任何消息。我不热衷于寻找,因为它需要知道时间段。我认为从自动化的角度来看,这可能很难实现。我认为这对手动更正很有好处,但工作量很大。我最初的感觉是快照可能更适合自动更正?
    • 用法不一样。快照是在某个时间点进行拍摄,寻找倒带时间并重播消息。快照后,所有新消息都不包含在其中。搜索也考虑到新消息。一切都取决于您的用例。
    猜你喜欢
    • 2019-07-02
    • 2020-08-08
    • 1970-01-01
    • 2018-01-01
    • 2020-05-25
    • 2018-06-22
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多