"保证交付"消息 - 建议:MQTT或ZeroMQ?

时间:2018-06-02 11:02:48

标签: c++ rabbitmq mqtt zeromq distributed-system

我们需要基于轻量级客户端的消息传递解决方案之前我们使用过AMQP,RabbitMQ,但是在C ++中我们遇到了问题。

我们想选择ZeroMQ与malamuteserver或MQTT?我们的物联网几乎每5分钟就会发布一次数据( 45 kb )。

我们需要100%传递此消息,并且不想丢失任何消息。

我们尝试了MQTT QoS级别2,但是当服务器断开连接或主服务器客户端出现问题时,我们将丢失已发布的消息。

我们需要完全正确的RabbitMQ任务/工作者模型。如果发生任何事情,消息应该在服务器中排队,直到消费者连接起来。

欢迎任何建议,方向和例子。

P.S。:这将是生产所以我们想选择不那么有问题的方式:)

非常感谢。

2 个答案:

答案 0 :(得分:1)

  

A: 我们需要100%发送此消息,并且不想丢失任何消息。
   B: 如果发生任何事情,消息应在服务器中排队,直到消费者连接为止。
   C: 这将是制作,因此我们希望选择一种问题较少的方式:)

A:是可行的 A: + B:可行,更难,但仍然可行 A: + B: + C:不是,这种要求的组合确实是成本

  

D: 欢迎任何建议,方向和示例。

ZeroMQ即将出现,因为轻量级,毫无疑问,可调/可调整的方式 ~ 45 [kb / 5 min] ,但是魔鬼正确地理解了 Zen-of-Zero 的强度,包,按原样,通过设计努力提供零保证并让所有类型的用户都设计他们自己的,特定于用例的(读作“需要足够的” - 保证 - 所以不要为世界其他地方的用例丢失一点效率,哎呀)。 p>

因此, D: 会花费大量的设计工作来覆盖“费用” - {{1您已达到设计目标。

这么简单,Maria, this is a common task for any and all CTO-s to face this and decide next steps.

奖金部分:

如果需要最大程度地降低物联网设备的要求,可以将这些 C: -of - costs与类似的自定义匹配进行比较由Martin SUSTRIK等人设计的可扩展形式通信模式原型的更轻量级框架,作为ZeroMQ的妹妹 - ,可能会有一些节省 - 功率/稀缺资源,通常存在于大量物联网设备中。

无论如何,请告诉我们,您的生产实施结果如何,好吗?

答案 1 :(得分:1)

我认为MQTT被夸大了,请确保我认为结果是由于可用的开源服务器所致。 Zeromq确实提供了许多功能来构建满足要求的内容。我越看待可用的选项,就越倾向于zeromq。在我们的情况下,我们将以随机间隔从大量设备(网状网络中的网关或它们的终端节点)接收数据。我们的最终消息大小非常简单,一个定界字符串,二进制编码,压缩(<100字节)并通过网络发送。我决定在服务器上的zeromq上接收消息。原因不仅是基于zeromq作为代理,还包括我们如何利用其curveZmq功能来简化设备的配置,并实现简单的ZTP(零触摸配置系统)和密钥可管理性。我在预设时间讨论使用pub / sub与push / pull模式,其中在每个终端设备中都是在云服务器上具有代理订户的发布者或推送者。尽管通常在pub / sub中的pub,在典型的大规模IOT部署中,发布者较少,订阅者更多,但发布者和订阅者却更多,所以这让我想知道我是否应该使用pub / sub,并且存在松动的问题。由于订阅者加入速度慢而产生的邮件-如果我们关闭服务器进行维护该怎么办,现场设备将一直发布邮件,直到达到HWM。猜猜总是存在丢失消息的风险,而不管发生什么事-回传网络已关闭且设备命中HWM-这已无法控制。

雪橇犬没有太多的文档,否则我会做更多探讨。

那么,您决定使用什么吗?如果您要保留消息直到消息被消耗,我强烈建议将zeromq作为代理,将工作人员将消息推入持久存储中。.您还可以在其中添加创意,包括序列号等,并允许客户端请求给定的消息序列范围等如果它们丢失了。