2017-03-20 103 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()

最後,沒有什麼特別的並行方式使用隊列用戶。這就是它們的作用:對屬於同一組的用戶在相同主題上的消息進行負載均衡處理。你唯一要小心,如果你是在同一個應用程序創建多個隊列用戶要麼是不共享的消息處理程序,或者如果你這樣做,你需要使用鎖定,因爲消息處理程序將同時援引消息到達快足夠。