是否可以拔出ZeroMQ PUSH Socket但是有一个像PUB / SUB一样的过滤器?

时间:2017-02-10 05:28:06

标签: sockets zeromq

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

完美的方法是一组A工人能够只向他们传递消息,并且设置B PULL消息意味着B.我可以,例如,为集合A设置端口,另一个为设置B,但是对于单个插槽来说,这个解决方案非常优雅,而且我也没有理由认为它不能由开发人员完成。

有没有办法用现有版本的ZeroMQ做到这一点?

基本思路是:只有一个PULL,它会发送封装的消息(就像在PUB中一样),并且工作人员可以使用此信封传递消息。看到工作人员可以拉出每条消息并查看它是否对他们有意义,但这需要额外处理和重播所收到的消息,以免被丢弃。

2 个答案:

答案 0 :(得分:0)

基本上我认为你必须自己实现这个功能。我想它看起来像这样......

像往常一样实施PUSH / PULL架构。但是,如果某个工作程序收到无法处理的消息,它会向该消息发送一条消息,告知它将该消息提供给下一个工作程序。这将基本上继续发生,直到消息到达可以处理消息的工作人员。要使其工作,您需要有一种方法将消息发送回源,以便让它知道您是否可以处理消息。为此,您可以查看ROUTER / DEALER体系结构,或者只是将源设置为SUB,该SUB监听来自工作人员的消息,指示他们是否能够/无法处理消息。

答案 1 :(得分:0)

你可以这样做:

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

我在制作中使用这种模式,效果很好。