ZMQ:没有订阅者时,消息是否在扩展pub-sub中发布?

时间:2020-06-09 11:18:35

标签: c++ zeromq publish-subscribe

根据ZMQ指南,在使用标准的pub-sub模式时,如果没有连接的客户端,则发布者不会发布任何消息。

如果发布者没有连接的订阅者,那么它将丢弃所有消息。

但是,如果您使用扩展的pub-sub模式,即发布者和订阅者由具有xsub和xpub套接字的zmq_proxy介导,会发生什么?如果没有订阅者,则很难推断在这种情况下会发生什么。我的假设是xsub套接字充当订户,并且 all 发布者将继续发布,而不管是否有实际的订户连接到代理。但这仅仅是有根据的猜测。此外,很难通过实验验证在这种情况下会发生什么-我想我必须使用Wireshark或类似的工具来监视网络流量。以为我会在走那条路之前问这个问题:)

预先感谢

1 个答案:

答案 0 :(得分:1)

代理将已发布的消息从上游生产者(PUB)路由到下游消费者(SUB)。它将订阅/取消订阅消息从使用者传递到发布者。发布者的PUB套接字会删除所有没有订阅的消息。

因此,如果代理下游没有使用者,并且生产者仅发布到代理,则所有生产者的消息都会被其PUB套接字丢弃。只有在使用者通过代理服务器的XPUB进行订阅(然后该代理服务器又通过XSUB将订阅转发给生产者到PUB)之后,消息才真正由生产者的PUB套接字通过代理转发给消费者。

我不确定代理是主动管理传递的订阅还是简单地传递它们,然后让生产者的PUB套接字处理它。我认为是后者。代理缓冲消息以允许消费者(或生产者)中断/重新连接。