【问题标题】:Creating multiple subs on same topic to implement load sharing (pub/sub)在同一主题上创建多个订阅以实现负载共享(发布/订阅)
【发布时间】:2019-02-06 17:34:05
【问题描述】:

我花了将近一天的时间在 google pub sub 文档上创建一个小应用程序。我正在考虑从 rabbitMQ 切换到 google pub/sub。这是我的问题:

我有一个将消息推送到主题 (T) 的应用程序。我想通过订阅者进行负载共享。所以我为 T 创建了 3 个订阅者。我保持所有 3 个订阅者的名称相同 (S),这样我就不会收到 3 次相同的消息。

我有 2 个问题:

  1. 我没有在控制台看到 3 个相同的 T 订阅者。它显示 1 个
  2. 如果我尝试同时启动所有 3 个订阅者实例。我收到“发生服务错误。”。如果我按顺序启动,错误就会消失。

最后,谷歌对 pub/sub 是认真的吗?查看文档和公众参与,我不确定是否应该切换到 google pub/sub。

谢谢,

【问题讨论】:

    标签: rabbitmq publish-subscribe google-cloud-pubsub


    【解决方案1】:

    在 pub/sub 中,每个订阅都会获取每条消息的副本。因此,要对处理消息进行负载平衡,您不需要 3 个不同的订阅,而是需要一个将消息分发给 3 个工作人员的订阅。

    如果您使用拉式交付,只需创建一个订阅(作为设置系统时的一次性操作),然后让每个工作人员从同一个订阅中拉取。

    如果您使用推送交付,则将单个订阅推送到提供负载平衡的单个端点(例如,推送到后端服务中具有多个实例的 HTTP 负载平衡器

    Google 非常重视 Pub/Sub,它已深度集成到许多产品(GCS、BigQuery、Dataflow、Stackdriver、Cloud Functions 等)中,并且 Google 在内部使用它。

    【讨论】:

    • 嗨,到目前为止,我一直无法做出如此看似简单的工作。如果我使用消息处理程序创建 3 个订阅者,即使在 VM 中看到它们,也只会触发一个消息处理程序。当我将两台虚拟机与他们自己的订阅者一起使用时,只有一个会收到它。使用 Redis,这可以按预期工作。我怀疑它与 ack 消息有关,它似乎不仅不会重新发送给一个订阅者,而且还会发送给其他任何订阅者。我仍在调查,但文档(用于 Java)不是很有帮助。
    【解决方案2】:

    根据 GCP 上的文档,https://cloud.google.com/pubsub/architecture

    负载平衡的订阅者是可能的,但所有订阅者都必须使用相同的订阅。没有任何代码示例或 POC 准备好但正在使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 2017-03-11
      • 2020-11-07
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      相关资源
      最近更新 更多