2012-11-01 49 views
2

我有一個使用ZMQ的Python消息傳遞應用程序。每個對象都有一個PUB和一個SUB隊列,並且它們相互連接。在某些特定情況下,我想等待SUB隊列中的特定消息,留下我不感興趣的消息以供日後處理。從ZMQ子隊列獲取特定消息

現在,我收到所有消息,並將那些我對Python隊列不感興趣的消息排隊,直到找到我正在等待的消息。但他的意思是,在每個處理路由中,我需要首先在Python隊列中檢查舊消息。有沒有更好的辦法?

回答

1

zmq發佈者不會執行任何排隊......當沒有SUB可用於接收這些消息時,它將刪除消息。

在你的情況下更好的方法是創建一個通用的sub只訂閱某些感興趣的消息。這樣你可以旋轉所有不同的SUB(甚至在一個線程內並使用zmq輪詢器),並且它們將全部處理來自PUB的消息......

這就是PUB/SUB模式主要用於。 Subs僅訂閱感興趣的消息,因此消除了在每個循環中遍歷消息隊列以尋找感興趣的消息的需要。

+0

我已經有一個IOLoop運行,我可以很容易地添加另一個回調。但我看到的問題是,在很多情況下,我只需要一條消息。所以我將不得不創建一個套接字,訂閱一個主題,然後刪除套接字。 – Hernan

+0

如果您只需要一個套接字,那麼我會考慮不使用Sub模式...使用req/rep套接字告訴「發佈者」您感興趣的消息並使其響應所請求的消息。您正嘗試在適合其他模式的情況下使用Pub-Sub模式 – g19fanatic

+0

是的,但我必須經常向發佈商詢問:您是否收到我的消息?另一件我認爲是使用PUB/SUB通知訂閱者一條消息已準備就緒,然後訂閱者使用REP/REQ來獲取它。 – Hernan