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“消息”
...
假设我们有服务器 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“消息”
...