Google PubSub 请求消息即使确认?

Googlr PubSub Request messages even if acknowledged?

我正在接收来自我使用以下方法创建的订阅的消息:

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. 我是否应该对我的订阅进行任何更改以应对未来的问题?我应该在启动时创建快照吗?

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

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

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