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
。
我有两个问题:
找回这些丢失的消息的最简单方法是什么?我知道他们会发生的时间段。是否可以指示服务使用时间戳重播它们?
我是否应该对我的订阅进行任何更改以应对未来的问题?我应该在启动时创建快照吗?
如果您不保留已确认的消息,则无法查找您的 PubSub 订阅并重播过去的确认消息。
快照很棒,特别是对于测试(可重播性)或在生产中发布新版本之前(在出现错误时回滚)。
IMO,retain_acked_messages 在您的情况下激活很重要。如果您的用例是重播已确认的消息,那么当您拥有此参数时,快照的用处不大。
我正在接收来自我使用以下方法创建的订阅的消息:
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
。
我有两个问题:
找回这些丢失的消息的最简单方法是什么?我知道他们会发生的时间段。是否可以指示服务使用时间戳重播它们?
我是否应该对我的订阅进行任何更改以应对未来的问题?我应该在启动时创建快照吗?
如果您不保留已确认的消息,则无法查找您的 PubSub 订阅并重播过去的确认消息。
快照很棒,特别是对于测试(可重播性)或在生产中发布新版本之前(在出现错误时回滚)。
IMO,retain_acked_messages 在您的情况下激活很重要。如果您的用例是重播已确认的消息,那么当您拥有此参数时,快照的用处不大。