【问题标题】:Is it possible to PULL a ZeroMQ PUSH Socket but with a filter just like PUB/SUB?是否可以使用 PUB/SUB 之类的过滤器拉出 ZeroMQ PUSH 套接字?
【发布时间】:2017-02-10 05:28:06
【问题描述】:

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

完美的方法是让一组 A 工作人员能够 PULL 只对他们有意义的消息,而一组 B PULL 消息对 B 意味着。例如,我可以为集 A 设置一个端口,另一个为设置 B,但是为单个套接字提供此解决方案会非常优雅,而且我也认为开发人员没有理由不能这样做。

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

基本思想是:只有一个 PULL,它会发送封装的消息(就像在 PUB 中一样),工作人员可以使用这个信封拉取消息。看到工作人员可以拉出每条消息,看看它是否是为他们准备的,但这需要对收到的消息进行额外的处理和重新广播,以便它不会被丢弃。

【问题讨论】:

    标签: sockets zeromq


    【解决方案1】:

    你可以这样做:

    将原始消息发布给两个适当过滤消息的 SUB (A/B)。然后这两个 SUB 套接字可以连接到两个 PUSH 套接字,发送给适当的 PULL 工作人员。

    我在生产中使用这种模式并且效果很好。

    【讨论】:

      【解决方案2】:

      基本上我认为您将不得不自己实现此功能。我想它看起来像这样......

      像往常一样实现 PUSH/PULL 架构。但是,如果一个工作人员收到一条它无法处理的消息,它会向源发回一条消息,告诉它将该消息提供给下一个工作人员。这基本上会一直发生,直到消息到达可以处理消息的工作人员。要使这项工作正常进行,您将需要一种将消息发送回源的方法,以使其知道您是否可以处理该消息。为此,您可以查看 ROUTER/DEALER 架构,或者简单地将源设置为 SUB,它侦听来自工作人员的消息,指示他们是否可以/不能处理该消息。

      【讨论】:

        猜你喜欢
        • 2015-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 2014-11-24
        • 2012-05-12
        • 2013-07-22
        相关资源
        最近更新 更多