【问题标题】:ZMQ: are messages published in extended pub-sub when there are no subscribers?ZMQ:当没有订阅者时,消息是否在扩展的 pub-sub 中发布?
【发布时间】:2020-09-28 13:24:11
【问题描述】:

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

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

但是,如果您使用扩展的 pub-sub 模式,即发布者和订阅者由 zmq_proxy 与 xsub 和 xpub 套接字进行中介,会发生什么?如果没有订阅者,很难推断在这种情况下会发生什么。我的假设是 xsub 套接字充当订阅者,并且 所有 发布者将继续发布,而不管是否有任何实际订阅者连接到代理。但这只是一个有根据的猜测。此外,很难通过实验验证在这种情况下会发生什么——我想我必须使用wireshark或类似的东西来监控网络流量。以为我会在开始这条路之前问这个问题:)

提前致谢

【问题讨论】:

    标签: c++ zeromq publish-subscribe


    【解决方案1】:

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

    所以如果 Proxy 下游没有消费者,而 Producer 只向 Proxy 发布消息,那么所有 Producer 的消息都会被其 PUB 套接字丢弃。只有在消费者通过 Proxy 的 XPUB 订阅(而代理又通过 XSUB 将订阅转发给生产者到 PUB)之后,消息才会真正由生产者的 PUB 套接字通过代理转发给消费者。

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

    【讨论】:

    • 感谢您的回答,这确实有助于澄清我对代理在扩展 pub sub 中的作用的理解。无论如何,我最终还是做了这个实验,只是使用任务管理器来监控网络流量,并且可以确认确实是这样 :)
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多