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