¿Puede Mosquitto soportar múltiples corredores?

20

He estado considerando a Mosquitto para un agente de mensajes MQTT para una red doméstica de IoT, pero me preocupa que el agente pueda ser un solo punto de falla que podría derribar toda mi red si falla, ya que todos los mensajes tienen que pasar el intermediario y ningún mensaje puede transmitirse si el intermediario se desconecta por algún motivo (por ejemplo, desconexión accidental, falla de hardware, etc.)

¿Sería posible utilizar múltiples corredores con Mosquitto instalado para mejorar la confiabilidad de la red? Si es posible, ¿existen desventajas / gastos generales significativos para usar múltiples corredores?

Aurora0001
fuente

Respuestas:

12

Sí, Mosquitto admite múltiples corredores.

Mosquitto usa MQTT Bridges para conectar múltiples intermediarios y así enrutar mensajes entre estos intermediarios de mosquitto. De esta manera, se puede establecer un puente entre su agente principal y un sistema de reserva. Sin embargo, evita crear bucles. Si ambos corredores ejecutan sus clientes, publique en el corredor principal, que luego publica el tema para cada uno de los suscriptores, incluido el corredor secundario en puente. Si el primario falla, sus clientes lo notarán (Conexión rechazada, Servidor no disponible) y pueden retroceder para publicar directamente en el secundario. (Todavía no estoy seguro de cómo solucionarlo al revés). Como no espera que el cliente se desconecte sin gracia, creo que "Last Will and Testament" no se aplica aquí (se usaría para que el corredor notifique en nombre de un cliente desconectado).

Sin embargo, esta publicación enumera los inconvenientes de este enfoque, especialmente con respecto a la escalabilidad y disponibilidad:

  • Los mecanismos de enrutamiento de puentes no se escalan bien si reenvía todos los mensajes a los otros puentes
  • La sobrecarga de comunicación entre puentes es importante si está utilizando QoS 2 entre puentes (lo que debe hacer si desea propagar mensajes entre clientes que están conectados a diferentes puentes)
  • No hay conmutación por error y alta disponibilidad. Si el puente de un agente se cae, los mensajes pueden perderse
  • Los clientes MQTT no se pueden migrar a otros nodos de puente. Las sesiones MQTT no se replican a través de puentes, por lo que perderá todos sus mensajes y suscripciones en cola si está utilizando sesiones persistentes MQTT.
Ghanima
fuente
10

En .NET, la implementación permite conectar un cliente a un corredor, así que diría por qué no ...

MqttClient mqtt;
string broker = ini.getData("MQTT", "hostname");
mqtt = new MqttClient(broker);
mqtt.MqttMsgPublishReceived += mqtt_received;
mqtt.Connect(Guid.NewGuid().ToString());

La cuestión es que debe administrar duplicados en caso de una falla cuando el otro agente comience a enviar mensajes o avise a los clientes.

¡Puede haber varias posibilidades de que cada corredor se suscriba entre sí y establezca una Última Voluntad y un Testamento para advertirles a ellos y a sus clientes que se producirá un retroceso!

Goufalite
fuente
¿Cómo puede un corredor suscribirse o más como conectarse a otro corredor?
Bence Kaulics
1
Estaba pensando en un cliente anidado en el servidor del corredor.
Goufalite
@Goufalite, esto es realmente útil para MQTT en general, gracias. ¿ Sabrías algo más sobre Mosquitto , el corredor que discutí en la pregunta?
Aurora0001
Esto es lo más bajo que sé sobre MQTT (no me di cuenta de que había otros corredores como HiveMQ antes de llegar a IoT SE). ¿Que mas te gustaria saber? ¿Te refieres a la implementación?
Goufalite
@Goufalite solo está interesado en si Mosquitto tiene una forma de ejecutar múltiples corredores en paralelo. Si pudiera sugerir una forma de hacerlo con Mosquitto o vincular la documentación, sería genial.
Aurora0001