2013-08-26 29 views
5

我正试图做一个pub/sub架构,其中多个发布者和多个订阅者存在于同一个总线上。根据我在互联网上读到的内容,只有一个套接字应该调用bind(),而其他所有套接字(无论是pub还是sub)都应该调用connect()。如何在ZeroMQ中使用单个端点执行多个发布者?

的问题是,这种方法我发现,只有真正在插座上调用bind()的出版商曾发布消息。我所有调用connect()的发布者似乎都默默地失败,实际上并没有将任何消息发布到总线上。我已经证实了这不是订户关键问题,因为我写了一个简单的“嗅探器”的应用程序,订阅总线上的所有的消息,并且只显示调用绑定发布者()。

如果我试图与出版商多重结合,默默窃取公交车“预期” ZMQ行为符合IPC发生,并且在使用错误的端口抛出与TCP。

我已经验证了这种行为与IPC和TCP终点,但最终整个系统将使用epgm。我认为(虽然当然可能是错误的),在这种情况下,我不需要代理,因为没有发生动态发现(端点已知,无论是ipc,tcp还是epgm多播)。

有我丢失的东西,也许是插座的设置,这将导致连接出版商不实际发送他们的数据?根据我在互联网上看到的文献,我正在做的事情是“正确”的方式,但它仍然行不通。

仅供参考,我的出版商类有用于设置端点以下方法:

ZmqPublisher::ZmqPublisher() 
: m_zmqContext(1), m_zmqSocket(m_zmqContext, ZMQ_PUB) 
{} 


void ZmqPublisher::bindEndpoint(std::string ep) 
{ 
    m_zmqSocket.bind(ep.c_str()); 
} 

void ZmqPublisher::connect(std::string ep) 
{ 
    m_zmqSocket.connect(ep.c_str()); 
} 

所以,最后,我的问题是:什么是处理在同一端点的多个出版商的正确方法,并为什么我看不到来自多个发布商的消息?

+0

你的问题不清楚;考虑修改。 – raffian

回答

2

它可能会或可能不相关,但The 0MQ Guide具有以下略高深莫测的话:

与ØMQ插座理论,它并不重要末端连接并最终结合。但是,实际上,我将在后面介绍一些未经证实的差异。现在,绑定PUB并连接SUB,除非您的网络设计使这些不可能。

我还没有发现其中“前来后来的”实际发生的,但我不使用pub/sub那么多,也没有阅读指南中的“高级发布 - 订阅模式”的一部分很详细。

然而,多个出版商在单个端点的想法,对我来说,提出了一个XPUB/XSUB风格经纪人的需要;这不是关于动态发现,而是关于单点联系和路由。最终,我认为基于代理的拓扑可以简化您的应用程序,并且更容易识别问题。

相关问题