ZeroMQ中的N到N异步模式是什么?

8
尽管我已经阅读了指南,但我无法找到以下操作的方法:
我们有n个发布者,
我们有m个订阅者。
每个订阅者都订阅特定类型的消息(一个发布者可以发送多种类型的消息,多个发布者可以发出相同类型的消息)。
如何在0MQ中创建实现此功能的N对N模式(或N对1对N模式)?

我闻到了一个反对票。“你尝试过什么?” - Vlad Balmos
指南示例,简单的很容易做到,但是在示例中没有一个N对N的,除了一个对我没用的(扩展请求-响应) - 我需要单向通信。 - NoSenseEtAl
换句话说,您正在询问如何在zeromq中实现ROS主题。 - Andrew Wagner
通常有关“您可以对发布者进行多次订阅”的废话。 你不知道该死的发布者是谁。 发布者是一个群集。 您不会寻址“一个”发布者,而是寻址其中的群集。 这似乎是一个对大众来说太他妈难懂的概念。 0MQ中关于这种情况的每个该死的图表都要么有一个单独的节点执行代理/发布/订阅或“多播UDP”。 这些方法都无法解决N到N对等连接的任何问题。 - Sleeper Smith
我之前问过类似的问题,但是附带了代码示例:https://stackoverflow.com/questions/49488135/zeromq-n-to-n-async-pattern-in-python - NumesSanguis
3个回答

2
“模式?一个出版商可以接受任意数量的订阅者,您的订阅者可以连接到多个出版商。我在这里没有看到任何问题,只需继续进行即可。”
“将来,也许您最好说明您想要实现什么,而不是如何去做。仅仅将一堆订阅者连接到一堆出版商可能不是您正在做的任何事情的最佳方式。”

我想要一个发布者集和一个订阅者集。但是订阅者不订阅X发布者,而是订阅消息的标签。另外,我希望它是异步的。 - NoSenseEtAl
@NoSenseEtAl:好的,请解释一下这些内容与我上面所说的有什么冲突。 - eevar

2

0MQ自动允许N到M网络;只需将每个订阅者连接到每个发布者即可。但这可能会成为管理负担,如果是这种情况,您可以使用一个简单的代理,所有发布者和订阅者都连接到该代理,详见http://zguide.zeromq.org/page:all#toc36


2
那个链接已经失效了,请搜索wuproxy示例。最终你会得到类似于7个线程参与每个消息的传输(发送者 -> PUB套接字 -> SUB套接字 -> 代理 -> PUB套接字 -> SUB套接字 -> 接收者),而且你仍然需要自己处理消息类型的序列化和过滤,所以zmq目前不能替代像ROS这样的中间件(尽管你可以在zmq之上编写一个)。 - Andrew Wagner
你如何“连接到每个发布者”?想想AWS自动扩展组。查询IP地址,连接到它们中的每一个,并协调消息开始发送时的情况,随着新的发布者的加入和离开而添加/删除新的发布者。不,谢谢。 - Sleeper Smith

0

我已经在C语言中完成了一个简单的示例,它使用了内置的zmq转发设备将消息从N个发布者转发到N个订阅者。代码可在https://gitorious.org/hellozmq上获取。


谢谢但不需要。当那个单一的框架崩溃时,一切都会崩溃。下一个。 - Sleeper Smith
好的,但如果单点故障是主要问题。所有N个订阅者可以直接连接到N个发布者,而代理可以充当目录服务。 - Jiva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接