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