Mosquitto peut-il prendre en charge plusieurs courtiers?


20

J'ai envisagé Mosquitto pour un courtier de messages MQTT pour un réseau IoT domestique, mais je crains que le courtier ne soit un point de défaillance unique qui pourrait faire tomber tout mon réseau en cas d'échec, car tous les messages doivent passer par le courtier et aucun message ne peut être transmis si le courtier se déconnecte pour une raison quelconque (par exemple, débranchement accidentel, panne matérielle, etc.)

Serait-il possible d'utiliser plusieurs courtiers avec Mosquitto installé pour améliorer la fiabilité du réseau? Si c'est possible, y a-t-il des inconvénients / des frais généraux importants à utiliser plusieurs courtiers?

Réponses:


12

Oui, Mosquitto prend en charge plusieurs courtiers.

Mosquitto utilise des ponts MQTT pour connecter plusieurs courtiers, acheminant ainsi les messages entre ces courtiers moustiques. De cette façon, un pont entre votre courtier principal et un système de secours peut être établi. Évitez cependant de créer des boucles. Si les deux courtiers exécutent vos clients, publiez sur le courtier principal qui publie ensuite le sujet à chacun des abonnés, y compris le courtier secondaire ponté. Si le serveur principal échoue, vos clients le noteront (connexion refusée, serveur indisponible) et peuvent se replier pour publier directement sur le serveur secondaire. (Je ne sais pas encore comment résoudre le problème dans l'autre sens.) Comme vous ne vous attendez pas à ce que le client se déconnecte sans grâce, je pense que "Last Will and Testament" ne s'applique pas ici (il serait utilisé pour que le courtier le notifie au nom d'un client déconnecté).

Ce billet énumère cependant les inconvénients de cette approche, notamment en ce qui concerne l'évolutivité et la disponibilité:

  • Les mécanismes de routage des ponts ne s'adaptent pas bien si vous transférez tous les messages aux autres ponts
  • La surcharge de communication entre les ponts est importante si vous utilisez la QoS 2 entre les ponts (ce que vous devez faire si vous souhaitez propager des messages entre des clients connectés à différents ponts)
  • Il n'y a pas de basculement et de haute disponibilité. Si un pont de courtage tombe en panne, les messages peuvent se perdre
  • Les clients MQTT ne peuvent pas être migrés vers d'autres nœuds de pont. Les sessions MQTT ne sont pas répliquées sur les ponts, vous perdrez donc tous vos messages et abonnements en file d'attente si vous utilisez des sessions persistantes MQTT.

10

En .NET, l'implémentation permet de connecter un client à un courtier, alors je dirais pourquoi pas ...

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

Le fait est que vous devez gérer les doublons en cas de repli lorsque l'autre courtier commencera à envoyer des messages ou avertira les clients.

Il peut y avoir plusieurs possibilités, comme chaque courtier s'abonne les uns aux autres et définit un testament et un dernier testament pour avertir eux-mêmes et leurs clients qu'un repli se produira!


Comment un courtier peut-il s'abonner ou se connecter à un autre courtier?
Bence Kaulics

1
Je pensais à un client imbriqué sur le serveur du courtier.
Goufalite

@Goufalite, c'est vraiment utile pour MQTT en général, merci. Auriez -vous de plus amples informations sur Mosquitto , le courtier dont j'ai parlé dans la question?
Aurora0001

C'est la chose la plus basse que je connaisse à propos de MQTT (je n'avais pas réalisé qu'il y avait d'autres courtiers comme HiveMQ avant de venir sur IoT SE). Que voulez-vous savoir d'autre? Vous voulez dire la mise en œuvre?
Goufalite

@Goufalite voulait simplement savoir si Mosquitto lui-même avait un moyen de gérer plusieurs courtiers en parallèle. Si vous pouviez suggérer un moyen de le faire avec Mosquitto ou lier la documentation, ce serait génial.
Aurora0001
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.