Google Pub/Sub 是队列还是主题?

Does Google Pub/Sub queue or topic?

我对 JMS 很熟悉,对 Google Pub/Sub 是新手。

在 JMS 中有 2 个选项:

我相信 Google Pub/Sub 应该支持这样的东西,但是快速谷歌搜索并没有帮助我回答这个问题。

请指出相应的文档部分。

如名称"Pub/Sub" 所示,Google Pub/Sub 支持对应于JMS 主题的publish/subscribes 语义。它不支持与 JMS 队列对应的点对点语义,至少不直接支持。

您可以在 the documentation 中查看语义概述。 "Publisher-subscriber relationships" 部分可能会有帮助。需要明确的是,本文档确实在两个地方使用了 queue 这个词:

  1. 在 "Pub/Sub message flow" 部分:"When a message is acknowledged by the subscriber, it is removed from the subscription's message queue."
  2. 在 "Common use cases" 部分:"For example, a large queue of tasks can be efficiently distributed among multiple workers, such as Google Compute Engine instances."

术语 queue 此处用于指代该主题的实际 subscription(即为订阅者放置消息的位置)消费)。此外,architectural overview 包括此图表: 此图演示了多个订阅者如何从同一订阅接收消息(例如,用于平衡工作负载)。这类似于 "shared subscription" 功能 added for topics in JMS 2.

我一直在寻找这个问题的答案,我找到了描述队列而不是主题行为的文档:

https://cloud.google.com/pubsub/docs/subscriber

While a message is outstanding to a subscriber, however, Pub/Sub tries not to deliver it to any other subscriber on the same subscription.

所以我的理解是,如果你想

  • 一个主题行为(一对多):你创建了很多订阅,每个订阅都会得到一份消息

  • 队列行为:您创建一个订阅

然后在每个订阅上您可以运行一个或多个订阅者进行负载平衡,每条消息只传递给一个订阅者

我没有看到订阅者之间的分布情况。可能是循环赛。