San*_*eep 2 queue concurrency go subscription nats.io
我正在创建NATS go lang Queue Subscriber客户端,如下所示:
nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) {
log.Printf("Message :%s", string(msg.Data))
})
Run Code Online (Sandbox Code Playgroud)
因此,每当我向“ foo”主题发布任何消息时,有时就会收到消息,而有时则不会。
例如,假设我向“ foo”主题发送了10条消息,那么它将最多收到2或3条消息。
我的要求如下
任何帮助表示赞赏。
如果您启动多个具有相同名称的队列订阅者(在您的示例中my_queue),那么在“ foo”上发布的消息将仅发送给那些队列订阅者之一。
从您的陈述中我不确定您是否暗示队列订阅者有时会错过消息或不会错过消息。请记住一件事:NATS中没有持久性(NATS流中有持久性)。因此,如果在创建订阅者之前发布消息,并且在该主题上没有其他订阅者,则消息将丢失。
如果您正在尝试从一个连接启动队列订阅者,然后在同一应用程序中从另一个连接发送消息,则服务器可能没有在开始接收消息之前未注册队列订阅(同样,如果您使用的是2连接)。在这种情况下,您需要在创建订阅之后和开始发送之前刷新连接:nc.Flush()。
最后,在并发模式下使用队列订阅者没有什么特别的。这就是它们的用途:对属于同一组的订户的同一主题上的消息进行负载平衡处理。如果要在同一应用程序中创建多个队列订阅者,则唯一需要注意的是要么不共享消息处理程序,要么共享,否则就需要使用锁定,因为如果消息很快到达,消息处理程序将被同时调用。足够。