【问题标题】:Can you create a centralized topic in ZeroMQ?你能在 ZeroMQ 中创建一个集中的主题吗?
【发布时间】:2015-03-12 01:41:51
【问题描述】:

我真的很想尝试 ZeroMQ,我想知道我的问题是否可以使用它来解决。

问题:我有多个订阅者和多个发布者。在集中式代理架构中,发布者将向主题发布消息(类似于多播地址),订阅者将从主题中获取消息并根据消息采取行动。我不能使用多播,因为我们的网络拓扑有多个子网,IT 人员不会将我的多播数据包转发到所有子网。

既然没有中心化的broker,那么ZeroMQ怎么解决这个问题呢? (任何语言的示例代码都很棒)

【问题讨论】:

    标签: c# php .net zeromq


    【解决方案1】:

    这是一个非常简单的问题,但我会尝试为您提供一些指导......请理解您没有描述实际问题,只是一个根据您的具体情况有几个潜在解决方案的用例需要。

    在非常基本的层面上,您可以让每个订阅者维护每个发布者的列表,并直接订阅每个发布者。这都是非常暴力和手动的,但这是完成您想要的第一步。

    如果维护该列表成为每个节点的棘手问题,您可以创建一个新节点来为您管理订阅者列表。当发布者启动时,它会向管理节点提供自己的通知,管理节点通知订阅者他们需要订阅它。

    如果我们谈论的是真正大量的发布者和订阅者,并且完整的网络拓扑正在寻求问题,您可以编写自己的代理来订阅每个发布者,然后重新发布给所有订阅者。

    这些解决方案中的每一个都有细微差别,但总的来说,这是您的三个基本选择。如果您对哪种方式最适合您的情况有所了解并且需要进一步的指导,请添加更多详细信息,我们可以了解具体情况。

    【讨论】:

    • 杰森,正是我想要的!只是想了解如何在 ZeroMQ 中实现这一点,以及它是否适合这个 MQ。听起来我又回到了 RabbitMQ。
    • @Denis,ZMQ 实际上更像是一个消息传递库,而不是一个完整的、开箱即用的消息传递系统。 RabbitMQ 和它的同类已经完全充实了它如何处理各种通信范式,ZMQ 将策略留给你。当标准解决方案(RabbitMQ)不太适合您所追求的,或者在一个领域有太多开销而在另一个领域不够时,它可能非常强大......但这意味着您还必须成为协议设计者给实施者。如果 AMQP 适合您(顺便说一下,它是由与 ZMQ 相同的人设计的),那么它可能是正确的选择。
    【解决方案2】:

    正在做一些阅读。毕竟这在 ZeroMQ 中是可能的。您可以将“FORWARDER”设备用作:

    import zmq
    
    def main():
    
        try:
            context = zmq.Context(1)
            # Socket facing clients
            frontend = context.socket(zmq.SUB)
            frontend.bind("tcp://*:5559")
    
            frontend.setsockopt(zmq.SUBSCRIBE, "")
    
            # Socket facing services
            backend = context.socket(zmq.PUB)
            backend.bind("tcp://*:5560")
    
            zmq.device(zmq.FORWARDER, frontend, backend)
        except Exception, e:
            print e
            print "bringing down zmq device"
        finally:
            pass
            frontend.close()
            backend.close()
            context.term()
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

    • 这是“经纪人”的一个版本(按比例缩小以适应目的),这就是我在回答的第三个选项中所指的内容。
    猜你喜欢
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2019-06-14
    • 2013-02-18
    相关资源
    最近更新 更多