Google PubSub Request 消息即使确认?
Posted
技术标签:
【中文标题】Google PubSub Request 消息即使确认?【英文标题】:Googlr PubSub Request messages even if acknowledged? 【发布时间】: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】:如果您不保留已确认的消息,则无法寻求您的 PubSub 订阅并重播过去的确认消息。
快照很棒,尤其是对于测试(可重播性)或在生产中发布新版本之前(发生错误时回滚)。
IMO,retain_acked_messages 在您的情况下激活很重要。如果您的用例是重播已确认的消息,则当您拥有此参数时,快照的用处不大。
【讨论】:
感谢您的回答。我将消息存储到数据库超过一周(一周后是一个新系列),我需要确保我不会错过任何消息。我不热衷于寻找,因为它需要知道时间段。我认为从自动化的角度来看,这可能很难实现。我认为这对手动更正很有好处,但工作量很大。我最初的感觉是快照可能更适合自动更正? 用法不一样。快照是在某个时间点进行拍摄,寻找倒带时间并重播消息。快照后,所有新消息都不包含在其中。搜索也考虑到新消息。一切都取决于您的用例。以上是关于Google PubSub Request 消息即使确认?的主要内容,如果未能解决你的问题,请参考以下文章
获取 Google Cloud PubSub 中单条消息的大小