在截止期限确认时间之前,Google Cloud PubSub消息已多次发送

时间:2018-11-29 11:01:55

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

背景: 我们配置了云pubsub主题以在多个应用引擎服务中进行交互, 在那里,我们已经配置了基于推送的订户。我们已将其确认截止日期配置为600秒

问题: 我们已经观察到pubsub向其订阅者推送了两次相同的消息(从其他主题出发,是其他消息的两倍以上),查看日志,我看到此消息推送发生的间隔仅为1秒,理想情况下,我们已将ackDeadline配置为600秒,则pubsub只能在600秒后重新尝试发送邮件。

需要以下答案:

  1. 为什么同一封邮件仅在1秒内发送了一次以上

  2. pubsub是否不遵循ackDeadline配置 重新尝试传递邮件?

参考: -https://cloud.google.com/pubsub/docs/subscriber

1 个答案:

答案 0 :(得分:2)

重新交付邮件可能有两个原因。首先,一条消息可能发布了两次。有时,发布者会收到错误,例如超过了截止日期,这意味着发布花费的时间比预期的长。在这种情况下,该消息可能已经发布,也可能尚未发布。通常,正确的操作是使发布者重试发布,实际上,默认情况下,这是Google提供的客户端库所做的。因此,即使客户仅得到其中之一的确认,也可能有两个成功发布的消息副本。

第二,Google Cloud Pub / Sub保证at-least-once delivery。这意味着,即使ackDeadline尚未通过或已将ack发送回服务,有时也可以重新传递消息。确认是最大的努力,大多数情况下,服务会成功处理它们。但是,由于网络故障,服务器重新启动以及其他此类常规事件的发生,有时将无法处理订阅者发送的确认,从而导致重新发送消息。

通常应通过确保操作是幂等的,即确保多次处理消息的结果是相同的,或者通过跟踪和捕获重复项,来设计订户以抵抗这些偶然的重新交付。或者,可以将Cloud Dataflow用作remove duplicates的订阅者。