2017-03-20 101 views
1

我创造NATS去郎排队认购的客户端如下,GO郎NATS多队列排队订阅

nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) { 
     log.Printf("Message :%s", string(msg.Data)) 
}) 

所以每当我发布的任何消息,“foo”的主题,然后一段时间它接收并在一段时间不。

例如,假设我发送了10条消息到上面的“foo”主题,那么它将会收到2或3个最大值。

我的要求如下,

  • 应该有排队认购。
  • 应处理所有输入事件。
  • 如何在并发模式下实现队列订阅。

任何帮助表示赞赏。

回答

4

如果您开始使用相同的名称(在你的例子my_queue)多队列用户,然后在“富”上刊出一条信息去只有那些排队的用户之一。

我不知道从您的语句,如果你暗示队列用户有时错过信息或不。请记住一件事:在NATS中没有持久性(在NATS流中)。因此,如果您在之前发布消息,则会创建该订户,并且如果该主题上没有其他订户,则这些消息将会丢失。

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

最后,没有什么特别的并行方式使用队列用户。这就是它们的作用:对属于同一组的用户在相同主题上的消息进行负载均衡处理。你唯一要小心,如果你是在同一个应用程序创建多个队列用户要么是不共享的消息处理程序,或者如果你这样做,你需要使用锁定,因为消息处理程序将同时援引消息到达快足够。