Google cloud platform 谷歌发布/订阅每~5条消息只发送一个订阅

Google cloud platform 谷歌发布/订阅每~5条消息只发送一个订阅,google-cloud-platform,publish-subscribe,google-cloud-pubsub,Google Cloud Platform,Publish Subscribe,Google Cloud Pubsub,我已经创建了3个连接到订阅的客户端和一个发布服务器。在图2中,订阅位于终端上,一个订阅不可见,因为它位于DigitalOcean Droplet上。似乎每5条消息,它就会切换哪个订户实际接收到消息,这是不应该发生的。我也改变了速度,它总是大约5条信息 以下是用于订阅的所有客户端上的代码: sub.on("message", (msg) => { console.log(`Message:1 ${msg.data.toString("utf-8")}`) msg.ack() })

我已经创建了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这实际上有点酷,因为您可以使用第一种情况进行负载平衡。。。谢谢在Java消费客户端中,我们可以控制消费线程的数量。那么,在上图中,每个线程都是一个单独的“订户”?裁判: