2012-11-01 41 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