过去几个月我一直在使用两个C程序,一个是ZeroMQ发布者,另一个是ZeroMQ订阅者。他们在虚拟机之间交换简单的字符串消息,并且一切正常。
现在,在我正在使用的其中一个VM(VM A)中,我配置了openvswitch,在另一个VM中配置了Ryu控制器。该图如下:
我将OVS的桥接接口绑定到VM A的eth3接口。一切正常,流入口由Ryu控制器添加或由我手动添加。
Now,我想添加我已经使用了无数次的ZeroMQ发布者-订阅者程序。在这里,控制器是订阅者,而OVS是发布者。
但是,消息永远不会到达控制器...如果我从安装了[[NOT且已配置OVS的net A
上的另一台计算机上运行ZeroMQ发布者,则消息会成功到达Ryu控制器。
netstat -at
的输出。 VM A是“ OpenWrt”,Ryu控制器是“ control”(仅考虑@control VM中的最后一行):我缺少什么吗?从de OVS向控制器发送TCP消息真的是不可能的吗?我是否应该创建从VM A到消息将流经的控制器的某种隧道?还是仅仅是ZeroMQ的问题,不适用于启用Openflow的体系结构?
如果您中的任何人曾经在Openflow环境中使用过消息队列技术,请告诉我。
我非常感谢您的帮助,已经困扰了我数周。
注意:我可以从控制器ping VM A,反之亦然。
由于未提供MCVE代码,因此缺少一对LoS可见性测试结果,来自:Q:我缺少什么吗?
<ZMQ_SUB_HOST>:~$ traceroute --sport=<ZMQ_TRANSPORT_PORT#> <ZMQ_PUB_HOST>
和
<ZMQ_PUB_HOST>:~$ traceroute --sport=<ZMQ_TRANSPORT_PORT#> <ZMQ_SUB_HOST>
这句话听起来很有希望,但是LoS可见性测试结果和MCVE代码细节都很重要,但是却没有。注意:我可以从控制器Ping VM A,反之亦然。
当然可以。这将隔离L3级别的问题,您的隧道路径将提供一种忽略所有这些问题的方法,但需要付出一些轻微的延迟权衡。Q:我是否应该创建从VM A到消息将流经的控制器的某种隧道?
没有特殊的原因归咎于ZeroMQ基础架构停止工作,但归因于L3 / SDN相关但尚未明确的问题。给定公平的Q:或者这仅仅是ZeroMQ的问题,不适用于启用Openflow的体系结构?
tcp://
-transport-class路径,并在正确配置的M-.bind( <class>://<addr>:<port> )
-s :N-.connect( <class>://<addr>:<port> )
-s关系中使用该路径,不报告任何错误状态在各自的操作上,ZeroMQ应且将一如既往地工作。