我一直在考虑将Mosquitto用作家庭物联网网络的MQTT消息代理,但是我担心该代理可能是单点故障,如果发生故障,可能会破坏我的整个网络,因为所有消息都必须通过代理,并且如果代理由于任何原因(例如意外拔出,硬件故障等)脱机,则根本不会传输任何消息。

可以使用安装了Mosquitto的多个代理来改善网络的可靠性?如果可能的话,使用多个代理是否有任何不利/大量的开销?

#1 楼

是的,Mosquitto确实支持多个代理。

Mosquitto使用MQTT桥连接多个代理,从而在这些mosquitto代理之间路由消息。这样,可以在您的主要经纪人和后备系统之间建立桥梁。避免创建循环。如果两个代理都运行,则您的客户端将发布到主代理,然后主代理将主题发布给每个用户以及包括桥接辅助代理在内的所有订户。如果主服务器失败,则您的客户端会记录(“连接已拒绝”,“服务器不可用”),并且可以回退以直接发布到辅助服务器。 (我不确定如何反过来解决它。)由于您不希望客户端不友好地断开连接,所以我认为“最后的遗嘱”在这里不适用(该功能通常用于通知经纪人代表断开连接的客户端)。

但是,本文列出了此方法的缺点,特别是在可伸缩性和可用性方面:



如果将所有消息转发到其他网桥,则网桥路由机制无法很好地扩展
如果在网桥之间使用QoS 2,则网桥之间的通信开销非常大(如果要在两个网桥之间传播消息,则需要这样做连接到不同网桥的客户端)
没有故障转移和高可用性。如果代理网桥崩溃,消息可能会丢失
MQTT客户端无法迁移到其他网桥节点。 MQTT会话不会跨网桥复制,因此,如果您使用MQTT持久会话,则会丢失所有排队的消息和订阅。



#2 楼

在.NET中,该实现允许将一个客户端连接到一个代理,所以我要说为什么不...

当另一个代理开始发送消息或警告客户端时的回退。

可能有多种可能性,例如每个经纪人彼此订阅并设置最后遗嘱和遗嘱来警告自己和他们的客户将发生回退!

评论


经纪人如何订阅或更喜欢连接到另一个经纪人?

– Bence Kaulics
16年12月14日在11:25

我想到的是一个嵌套在代理服务器上的客户端。

–古法利特
16 Dec 14'在12:34

@Goufalite,总体而言,这对于MQTT确实非常有用,谢谢。您是否会进一步了解我在问题中讨论过的经纪人Mosquitto?

–Aurora0001♦
16年12月14日在14:50

这是我对MQTT的最低了解(在进入IoT SE之前,我还没有意识到还有像HiveMQ这样的经纪人)。您还想知道什么?你是说实施?

–古法利特
16 Dec 14'在15:48

@Goufalite只是想知道Mosquitto本身是否可以并行运行多个代理。如果您可以提出一种使用Mosquitto或链接文档的方法,那就太好了。

–Aurora0001♦
16 Dec 14'在16:34