Google Pub/Sub 每 ~5 条消息只发送给一个订阅者
Google Pub/Sub sending to only one subscription every ~5 messages
我已将 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"
})
在 Cloud Pub/Sub 中,订阅是一个逻辑实体,它希望将所有消息发布到与订阅关联的主题。订阅者是代表订阅接收消息的客户端。当有多个订阅者接收单个订阅的消息时,每个订阅者都会接收消息的子集。这是 负载平衡 情况,其中使用多个订阅者大规模处理消息;如果需要支持更多消息,只需让更多订阅者接收来自同一订阅的消息。
当一个主题有多个订阅时,则每条消息都必须发送给代表每个订阅接收消息的订阅者。这是 扇出 用例。
这里有一张图,试图让它更清楚一点。左边是负载均衡,右边是扇出:
我已将 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"
})
在 Cloud Pub/Sub 中,订阅是一个逻辑实体,它希望将所有消息发布到与订阅关联的主题。订阅者是代表订阅接收消息的客户端。当有多个订阅者接收单个订阅的消息时,每个订阅者都会接收消息的子集。这是 负载平衡 情况,其中使用多个订阅者大规模处理消息;如果需要支持更多消息,只需让更多订阅者接收来自同一订阅的消息。
当一个主题有多个订阅时,则每条消息都必须发送给代表每个订阅接收消息的订阅者。这是 扇出 用例。
这里有一张图,试图让它更清楚一点。左边是负载均衡,右边是扇出: