【发布时间】:2013-08-02 03:50:14
【问题描述】:
我已经看到了几个关于此的问题,但没有一个我认为满意的答案。这个问题,尤其是zeromq pattern: pub/sub with guaranteed delivery 是类似的,尽管我愿意使用任何其他 zeromq 机制来实现相同的效果。
我的问题是,有什么方法可以像 ZeroMQ 中的发布者-订阅者那样以扇出模式发送消息,并保证消息将被传递?似乎零副本的经销商可以做到这一点,但它会比 pub-sub 更混乱。有更好的选择吗?这样做除了要编写更多代码之外还有什么缺点?
需要这个的原因:
我正在编写代码来分析来自仪器的数据。连接到仪器的模块需要能够将数据广播到其他模块以供他们分析。反过来,他们需要将分析的数据广播到输出模块。
乍一看,使用 ZeroMQ 的 pub-sub 似乎非常适合这项工作,但如果任何订阅者速度变慢并达到高水位线,消息就会被丢弃。在这个系统的情况下,由于事件的连续性,只在一小部分模块中丢弃消息是不可接受的。所有模块都需要分析事件以使输出有意义。但是,如果没有模块收到事件的消息,那很好。因此,如果其中一个分析模块达到高水位线,则可以阻止发布者(检测模块)。
我想另一种选择是在事后处理丢失的消息,但这只会浪费处理稍后将被丢弃的事件的时间。
编辑: 我想进一步考虑这一点,我目前期望消息已发送 = 消息已传递,因为我正在使用 inproc 并在线程之间进行通信。但是,如果我要通过 TCP 发送消息,即使 ZeroMQ 没有故意丢弃它,消息也有可能丢失。这是否意味着即使我使用阻塞发送,我也可能需要处理丢弃的消息?使用 inproc 传递消息是否有任何保证?
【问题讨论】:
标签: c++ zeromq publish-subscribe