2017-02-10 24 views
0

我使用PUSH套接字向通过PULL接收的工作人员发送消息,因此消息在工作人员中均匀分布。不过,我想用一些工作人员来处理特定的消息。在PUSH/PULL方法中,每个工人都没有特别的待遇,他们都是平等的。我虽然使用PUB/SUB,但由于过滤器,但没有办法自动分发给工人。如果一组工人要处理消息A,他们都会收到。这不好。是否可以用PUB/SUB来拉一个ZeroMQ PUSH套接字但使用过滤器?

完美的方法是对于一组工人能够只对他们提供PULL消息,而对B设置B PULL消息。例如,我可以为A组和另一个组设置一个端口,集合B,但是对于单个套接字来说,这种解决方案会非常优雅,我也没有看到开发人员无法完成的原因。

有没有办法用现有的ZeroMQ版本来做?

其基本思想是:只需一个PULL,它可以发送封装的消息(就像在PUB中一样),工作人员可以用这个信封拉PULL消息。看到工作人员可以拉出每条信息,看看它是否适合他们,但这需要额外的处理和重播广播收到的信息,以免丢弃。

回答

0

本质上,我认为你将不得不自己实现这个功能。我想它看起来像这样...

像普通一样实施PUSH/PULL架构。但是,如果一个工作人员得到了一条不能处理的消息,它就会向源发回一条消息,告诉它将该消息提供给下一个工作人员。这将基本上持续发生,直到消息到达可以处理消息的工作人员。要做到这一点,您需要有一种方法来将消息发回给源,让其知道您是否可以处理消息。为此,您可以查看ROUTER/DEALER体系结构,或者将源设置为SUB,以侦听来自工作人员的消息,指示他们是否可以/不能处理消息。

0

你可以这样做:

PUB原始消息到两个子(A/B),该过滤器适当的消息。然后,可以将这两个SUB插座连接到发送给相应的PULL工作人员的两个PUSH插座。

我在生产中使用这种模式,它运作良好。

相关问题