Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多队列订阅的GO-lang NATS队列_Go_Concurrency_Queue_Subscription_Nats.io - Fatal编程技术网

使用多队列订阅的GO-lang NATS队列

使用多队列订阅的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

我正在创建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", "my_queue", func(msg *nats.Msg) {
        log.Printf("Message :%s", string(msg.Data))
})
  • 应该有队列订阅
  • 应处理所有输入事件
  • 如何在并发模式下实现队列订阅

谢谢你的帮助

如果使用相同的名称启动多个队列订阅者(在您的示例中为
my_queue
),则在“foo”上发布的消息只会发送到其中一个队列订阅者

从您的声明中,我不确定您是否暗示队列订阅者有时会错过消息。记住一件事:NAT中没有持久性(NAT流中没有持久性)。因此,如果在创建订阅服务器之前发布消息,并且在该主题上没有其他订阅服务器,则消息将丢失

如果您正在试验并从一个连接启动队列订阅服务器,然后在同一应用程序中从另一个连接发送消息,则可能是服务器在开始接收消息之前没有注册队列订阅(同样,如果您使用2个连接)。如果是这种情况,则需要在创建订阅后和开始发送之前刷新连接:
nc.flush()

最后,在并发模式下使用队列订阅者没有什么特别之处。这就是它们的用途:为属于同一组的订阅者处理关于同一主题的消息的负载平衡。如果要在同一个应用程序中创建多个队列订阅者,唯一需要注意的是不要共享消息处理程序,或者如果共享消息处理程序,则需要使用锁定,因为如果消息到达速度足够快,消息处理程序将被并发调用