使用多队列订阅的GO-lang NATS队列
我正在创建NATS go lang队列订户客户端,如下所示使用多队列订阅的GO-lang NATS队列,go,concurrency,queue,subscription,nats.io,Go,Concurrency,Queue,Subscription,Nats.io,我正在创建NATS go lang队列订户客户端,如下所示 nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) { log.Printf("Message :%s", string(msg.Data)) }) 所以,每当我向“foo”主题发布任何消息时,它有时会收到,有时不会 e、 假设我向上面的“foo”主题发送了10条消息,那么它最多会收到2或3条消息 我的要求如下: nc.QueueSubscribe("foo
nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) {
log.Printf("Message :%s", string(msg.Data))
})
所以,每当我向“foo”主题发布任何消息时,它有时会收到,有时不会
e、 假设我向上面的“foo”主题发送了10条消息,那么它最多会收到2或3条消息
我的要求如下:
nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) {
log.Printf("Message :%s", string(msg.Data))
})
- 应该有队列订阅
- 应处理所有输入事件
- 如何在并发模式下实现队列订阅
谢谢你的帮助 如果使用相同的名称启动多个队列订阅者(在您的示例中为
my_queue
),则在“foo”上发布的消息只会发送到其中一个队列订阅者
从您的声明中,我不确定您是否暗示队列订阅者有时会错过消息。记住一件事:NAT中没有持久性(NAT流中没有持久性)。因此,如果在创建订阅服务器之前发布消息,并且在该主题上没有其他订阅服务器,则消息将丢失
如果您正在试验并从一个连接启动队列订阅服务器,然后在同一应用程序中从另一个连接发送消息,则可能是服务器在开始接收消息之前没有注册队列订阅(同样,如果您使用2个连接)。如果是这种情况,则需要在创建订阅后和开始发送之前刷新连接:nc.flush()
最后,在并发模式下使用队列订阅者没有什么特别之处。这就是它们的用途:为属于同一组的订阅者处理关于同一主题的消息的负载平衡。如果要在同一个应用程序中创建多个队列订阅者,唯一需要注意的是不要共享消息处理程序,或者如果共享消息处理程序,则需要使用锁定,因为如果消息到达速度足够快,消息处理程序将被并发调用