Nats.io: 主题不同但同名队列的订阅者会并行处理消息吗?

Nats.io: Will the subscribers with the different subjects but the same named queue process messages in parallel?

假设我们有服务器 A 和发布者,服务器 B 和 C 和消费者。 我们还有 5 个不同的科目; foo1,foo2,... foo5。 我们总是希望只向一个消费者发送一条消息并且只收到一个响应。

因此,我们在发布者端使用 JS SDK 中的 requestOne 函数,并使用 {queue: "default"} 选项订阅函数。 所以服务器 B 和 C 都为每个主题订阅了一次。 但是每次他们订阅时,他们都使用名称为 "default" 的队列来防止多个消费者收到 docs.

中提到的相同消息

所以问题是: 这个名为 "default" 的队列是否会在所有主题之间共享?或者每个主题都有自己的名称为 "default" 的队列,它仅在特定主题的订阅者之间共享。

例如:生产者为每个主题生成10条消息2。 我们将同时处理 10 条消息还是仅处理 2 条消息,因为所有订阅共享名称为 "default" 的同一个队列?

您根据指定的队列名称和主题组成一个队列组。因此 "foo" 的队列组与 "bar" 上的队列组不同。

也就是说,使用通配符,您可以让多个主题成为同一队列组的一部分。也就是说,组 "bar" 中的 2 个成员在 "foo.*" 上监听,将拆分处理在 "foo.bar"、"foo.baz" 等上发送的消息。

同一个队列名称在不同科目中是分开的

您可以使用下面 link 中的示例进行测试。 https://nats.io/documentation/additional_documentation/nats-queueing/

启动 nats 服务器

gnatsd

子主题1

go 运行 nats-qsub.go subject1 default

...

子主题2

go 运行 nats-qsub.go subject2 default

...

发布主题 1&2

go 运行 nats-pub.go subject1“消息”

...

go 运行 nats-pub.go subject2“消息”

...