【问题标题】:Google Pub/Sub sending to only one subscription every ~5 messagesGoogle Pub/Sub 每约 5 条消息仅向一个订阅发送
【发布时间】:2020-03-03 05:19:05
【问题描述】:

我已经让 3 个客户端连接到一个订阅,以及一个发布者。在图像 2 中,订阅位于终端上,并且没有看到一个订阅,因为它托管在 DigitalOcean Droplet 上。似乎每 5 条消息,它切换哪个订阅者实际接收消息,这不应该发生。我也改变了速度,总是大约 5 条消息。

这是所有客户端用于订阅的代码:

sub.on("message", (msg) => {
  console.log(`Message:1 ${msg.data.toString("utf-8")}`)
  msg.ack()
})

这里是发布的代码:

console.log("send")
topic.publish(Buffer.from("hey"), {
        channelId: "641273551806267403"
    })

【问题讨论】:

  • 我最初的想法是设计意图是每个订阅一个客户端......这似乎与其他平台非常不同
  • 我的上述想法似乎是解决方案......我会等待另一个人在我回答之前插话
  • 设计取决于。如果您希望多个服务响应一个消息队列,请使用一个订阅。如果您希望一条消息由多个服务处理(例如,一个服务在 BigQuery 中记录消息,另一个服务处理该消息),请使用多个订阅。在第一种情况下,每个服务将处理一定比例的消息,在第二种情况下,每个服务将处理所有消息。
  • @JohnHanley 这实际上有点酷,因为您可以使用第一种情况进行负载平衡...谢谢!

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


【解决方案1】:

在 Cloud Pub/Sub 中,订阅是一个逻辑实体,它希望将所有消息发布到与订阅相关联的主题。订阅者是代表订阅接收消息的客户端。当有多个订阅者接收单个订阅的消息时,每个订阅者都会收到消息的子集。这是负载平衡的情况,其中一个使用多个订阅者来大规模处理消息;如果需要支持更多消息,只需启动更多订阅者以接收来自同一订阅的消息。

当一个主题有多个订阅时,每条消息都必须发送给代表每个订阅接收消息的订阅者。这是扇出用例。

这是一个试图使其更清晰的图形。左边是负载均衡,右边是扇出:

【讨论】:

猜你喜欢
  • 2022-07-27
  • 2017-07-12
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2021-08-04
  • 2020-02-14
  • 2019-08-09
  • 2020-04-10
相关资源
最近更新 更多