2ad*_* xx 3 c++ distributed-system rabbitmq zeromq mqtt
我们需要一个轻量级的基于客户端的消息传递解决方案。我们之前用过AMQP,RabbitMQ,但是在C++中我们有问题。
我们想选择 ZeroMQ with malamuteserver 还是 MQTT ?我们的物联网几乎每 5 分钟就会发布一次数据 (45 kb)。
我们需要 100% 地传递此消息,并且不想丢失任何消息。
我们尝试了 MQTT QoS 级别 2,但是当服务器断开连接或主服务器客户端出现问题时,我们会丢失已发布的消息。
我们需要的正是 RabbitMQ 任务/工作者模型。如果发生任何事情,消息应该在服务器中排队,直到消费者连接。
欢迎任何建议、方向和示例。
PS:这将是生产,所以我们想选择问题较少的方式:)
小智 7
我认为 MQTT 被夸大了,我认为结果肯定是由于可用的开源服务器。Zeromq 确实提供了许多功能来构建满足要求的东西。我越看可用的选项,我就越倾向于 zeromq。在我们的例子中,我们将以随机间隔从大量设备(网状网络中的网关或终端节点)接收数据。我们最终确定的消息大小非常简单,一个分隔的字符串,二进制编码,压缩(<100 字节)并通过网络发送。我决定在服务器上使用 zeromq 来接收消息。原因不仅基于作为代理的 zeromq,还包括我们如何利用它的 curveZmq 功能来简化设备的配置,并允许简单的 ZTP(零接触配置系统)和密钥可管理性。我在预设时间辩论使用 pub/sub 与 push/pull 模式,其中每个终端设备是发布者或推送者,在云服务器上有一个代理订阅者。虽然通常在 pub/sub 中发布,但在典型的大规模物联网部署中,发布者较少,订阅者较多,但发布者较多,订阅者较少,所以我想知道我是否应该使用 pub/sub 并且存在丢失的问题由于订阅者加入缓慢而导致的消息 - 如果我们关闭服务器进行维护,现场的设备将继续发布消息,直到达到 HWM。猜猜总是有丢失消息的风险,无论发生什么——回程网络出现故障并且设备击中 HWM——这是失控的。虽然通常在 pub/sub 中发布,但在典型的大规模物联网部署中,发布者较少,订阅者较多,但发布者较多,订阅者较少,所以我想知道我是否应该使用 pub/sub 并且存在丢失的问题由于订阅者加入缓慢而导致的消息 - 如果我们关闭服务器进行维护,现场的设备将继续发布消息,直到达到 HWM。猜猜总是有丢失消息的风险,无论发生什么——回程网络出现故障,设备击中 HWM——这是失控的。虽然通常在 pub/sub 中发布,但在典型的大规模物联网部署中,发布者较少,订阅者较多,但发布者较多,订阅者较少,所以我想知道我是否应该使用 pub/sub 并且存在丢失的问题由于订阅者加入缓慢而导致的消息 - 如果我们关闭服务器进行维护,现场的设备将继续发布消息,直到达到 HWM。猜猜总是有丢失消息的风险,无论发生什么——回程网络出现故障并且设备击中 HWM——这是失控的。现场设备将继续发布消息,直到达到 HWM。猜猜总是有丢失消息的风险,无论发生什么——回程网络出现故障并且设备击中 HWM——这是失控的。现场设备将继续发布消息,直到达到 HWM。猜猜总是有丢失消息的风险,无论发生什么——回程网络出现故障并且设备击中 HWM——这是失控的。
Malamute 没有太多文档,否则我会对其进行更多探索。
那么,您决定使用什么了吗?如果您想保留消息直到它们被消耗,我强烈建议使用 zeromq 作为代理,工作人员将消息推送到持久存储中。序列范围等,如果它们丢失。