Hug*_*sos 4 google-cloud-pubsub google-cloud-functions
我有一个订阅了 Pub/Sub 主题的云函数。
根据docs,如果 Cloud Function 返回非成功响应,它将重新发送消息:
端点通过返回 HTTP 成功状态代码来确认消息。不成功的响应表示应该重新发送消息。
我的问题是:如果响应不成功,消息将被立即重新发送还是 Pub/Sub 将遵守确认截止日期重新发送消息?
我认为这个问题没有意义,我将解释原因。
由于您无法访问Response
Pub/Sub 函数中的对象,因此无法直接发送响应代码(我对此不确定,所以如果我错了,请纠正我)。
因此,非成功响应只能由以下原因引起:
超时,这是基于确认截止日期,因此在这种情况下,确认截止日期显然将受到尊重。
Cloud Function 中的一个错误,正如Andrei Cusnir所说,默认情况下 Pub/Sub 甚至不会重试,所以关心确认截止日期是没有意义的。
在调查 Google Cloud Functions 行为时,我发现如果 Cloud Functions 失败并以错误消息响应,它将不会重试该操作。我创建了一个由 Pub/Sub 事件触发的云函数,然后以错误消息进行响应。该消息记录在 Stackdriver 日志记录页面中,然后也记录了错误,但该函数从未重新发送该消息,因此它从未被重新触发。在那之后,我还尝试在实际读取 Pub/Sub 消息之前使用错误代码进行响应,但它仍然在日志中失败,但从未重新发送消息以再次实际重试其操作。
这是 Google Cloud Function 保护自己免于在无限循环中运行的预期行为。如果基于 Pub/Sub 主题事件触发器的 Cloud Function 失败,它很可能会在重试期间再次失败。因此,如果它在向主题重新发送消息时一直调用自己,它也会陷入循环,产生计费成本。
要使用 Google Cloud Function 的重试功能,您必须在部署时使用标志启用它。有关更多信息,您可以在重试后台函数中查看文档中。根据您将在配置中为 Google Cloud Function 重试策略设置的内容,它将触发重试。
但是,重试将立即进行,并且不会遵守确认截止日期。
使用 Pub/Sub 事件触发器创建 Google Cloud Function 时,会为所选主题创建订阅,您可以在主题的详细信息页面 ( Google Cloud Platform > Pub/Sub > Topics > [TOPIC_NAME]
) 中看到这一点。订阅负责读取主题中发布的消息并将消息发送ack
回主题。一个主题可以有多个订阅,并且它至少向每个订阅发送每条收到的消息一次。正如订阅者概述文档中所述。
在同一链接中,指出A message is considered outstanding once it has been sent out for delivery and before a subscriber acknowledges it.
. 也有人说The subscriber has a configurable, limited amount of time -- known as the ackDeadline -- to acknowledge the outstanding message.
。为了进一步详细说明该系统的工作原理,假设有一个 TopicA,然后 SubscriberA 和 SubscriberB 订阅了该主题。现在,一条消息正在发送到 TopicA,因此 TopicA 将消息转发给Subscriber-A
和Subscriber-B
并开始等待来自两个订阅者的确认。每个订阅者都有不同的 ack 响应时间,即ackDeadline
. 如果 SubscirberA 以 ack 响应,则 TopicA 将继续等待Subscriber-B
。如果Subscriber-B
在指定的时间内不会发送 ack,Topic-A
则只会将消息重新发送到Subscriber-B
。
现在,你提到了 The endpoint acknowledges the message by returning an HTTP success status code. A non-success response indicates that the message should be resent.
了文档一部分。这部分讨论的是订阅者的响应,而不是 Google Cloud Function 的响应。由于 Google Cloud Function 是由于在 Topic 中发布消息而被调用的,从那时起,与该 Cloud Function 关联的订阅者会将 ack 消息发送回该主题。在此之后,无论 Google Cloud Function 是否无法处理消息,它都不会以任何方式影响 Pub/Sub 主题,因为它只关心已经交付的消息。
要进一步详细说明问题更新部分中的两点:
归档时间: |
|
查看次数: |
1016 次 |
最近记录: |