2013-05-03 79 views
2

我正試圖用ZeroMQ設計一個pub/sub體系結構,並且我想最大限度地使用ZMQ的用戶內部過濾。ZeroMQ pub/sub模式中的多個信封的最佳方法?

在ZMQ中處理多個郵件信封的最佳方式是什麼,以便接收訂戶只能看到匹配它感興趣的所有信封的郵件?

舉個例子層次結構,比方說我有一個UniverseID,一個會話ID和MessageTypeID,我想找到所有給定類型的MessageTypeIDs的給定會話和宇宙,就像這樣:

UniverseID (Subscriber Key, Example = 42) 
    SessionID (Subscriber Key, Example = 4) 
     MessageTypeID (Subscriber Key, Example = 2) 
      Message (Actual Message) 

ZMQ中有沒有一種方法可以像使用多個幀的「分層過濾器」一樣過濾消息,或者是在單個信封幀內構建單個密鑰的最佳方法(例如「UniverseID.SessionID.MessageTypeID」或在我們的示例中,「42.4.2」)?

最終目標是由ZMQ外的用戶完成零篩選,這樣如果我在我的套接字上調用zmq_recv,我只能看到匹配所有三個訂戶鍵的消息,而不必手動檢查我是否在做任何事情之前,都對這條信息感興趣。

回答

1

是否有ZMQ的方式的濾波像中的消息「分層 濾波器」具有多個幀或是單個信封幀(即內建立一個單一的鍵 作爲 「UniverseID.SessionID的最佳方式.MessageTypeID「或在我們的例子」42.4.2「)?

這是要走的路(只需稍作修改)。

  • 如果你想要所有的消息,訂閱沒有前綴。
  • 如果你想與UniverseID A中的所有郵件,訂閱前綴爲A.
  • 如果你想與UniverseID A和SessionID的B中的所有信息,以前綴A.B.
  • 訂閱如果你想與UniverseID A,會話ID的所有消息B,和MessageTypeID C,認購帶有前綴A.B.C.

注意此外,我已經加入到了關鍵的最後的最後.的。這就是說,當所有ID被指定爲特殊情況時,您不必處理該案例。