【问题标题】:zeromq create messages buffer between nodeszeromq 在节点之间创建消息缓冲区
【发布时间】:2014-12-02 08:01:11
【问题描述】:

我需要一个无代理模式来在节点之间读取和写入消息,而无需从队列中删除任何消息,直到某些监控系统接受删除消息。

我可以用 zeromq 做到这一点吗?在 zmq 中,如果一个发布者节点死亡,网络上排队的消息也消失了吗?我怎样才能将这个队列保存在网络中!!!

( 我想发送一条消息,发布者和订阅者读取消息,但不要从队列中删除它,直到我的 Qos 监视器从数组中删除它。如果我的发布者死了,用它创建的消息队列不应该被删除。

我可以用 zmq 中的当前模式实现这些功能吗? )

【问题讨论】:

  • 既然您已包含标签dds,您是否也对使用DDS 的解决方案感兴趣?你没有在你的问题中提到它。
  • @ReinierTorenbeek 我不知道,我认为使用像 zmq 这样的 MQ 并实现这样的模式(我上面描述的)到目前为止还不是 DDS 架构。如果我对dds的理解有误,请纠正我?谢谢

标签: c++ zeromq data-distribution-service


【解决方案1】:

您必须在应用程序中构建这种级别的冗余/可靠性,而不是依赖 ZMQ 来提供。

这意味着您必须跟踪发布者节点上的所有消息,然后订阅者节点应该能够回复它已收到消息,从而允许发布者节点删除它的缓存.这意味着很可能有多个套接字,除非您真的想尝试让 XPUB/XSUB 以这种方式进行通信,但这似乎不是理想的选择。

如果您需要在您的通信库中获得更直接支持的东西,那么 ZMQ 不会为您解决问题……但我怀疑您是否会找到其他任何东西。

【讨论】:

  • 我在 opensplice 中查看了一些它似乎提供了这样的功能,slideshare.net/Angelo.Corsaro/…
  • 不能说我对opensplice了解很多,在几分钟的搜索中,它听起来像是DDS协议的开源实现。因此,它不能直接与 ZMQ 相提并论……将 opensplice 视为一个完整的通信应用程序,而 ZMQ 是一个用于构建完整通信应用程序的工具集。我还没有深入研究 DDS 规范,看你是否可以用 ZMQ 完全实现它,但你应该能够近似它。但是,如果它满足您的需求,您可能会选择使用 opensplice。
  • 我不想在我的项目中使用opensplice,你说得对,我想使用ZMQ并基于DDS创建自己的通信应用程序,你看到我发给你的链接了吗?在第 13 页之后?,您认为我可以使用 zyre opnamp 等 zmq 库实现这样的全局数据域吗?
  • 正如我所说,我对 DDS 规范的研究还不够深入,看不出你能完成什么,但正如我从一开始就说过的,如果你想要这种级别的数据可靠性,那就是你必须自己写一些东西,因为它不是 ZMQ 提供的。
猜你喜欢
  • 2011-11-15
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多