GCP Pub/sub 消息的确认行为

Acknowledgement Behaviour of GCP Pub/sub messages

我正在开发微服务,其中包含对 GCP Pub/Sub 中主题的订阅。作为一个微服务的多个实例 运行 在多个主机(云上的多个集群)上,我想知道来自订阅的消息的确认行为。当一个实例上的订阅 接收、处理并确认 消息时,其他主机上的相同订阅是否收到消息?

我预计一旦订阅者确认,pub/sub 不会进一步发送消息,但是如果不同主机上同一订阅的两个订阅者同时收到消息,会导致重复吗?

Pub/Sub delivers each published message at least once for every subscription.

https://cloud.google.com/pubsub/docs/subscriber#at-least-once-delivery

如果您希望多个“工作人员”不接收消息克隆,您需要对所有这些工作人员使用一个订阅。

这是因为对于事件,您可以让多个系统在不同的订阅上侦听同一主题,以便所有系统都收到发生某事的事件。

对于命令,您通常希望单个系统来处理它们(即使在多个工作人员之间拆分),因此您需要一个在所有工作人员之间共享的订阅。

顺便说一下,您的系统应该 idempotent 正在处理来自主题的 events/commands。一般的经验法则是每条消息都保证被订阅者 至少 接收一次。这意味着同一个系统可能会收到两次相同的命令。