Comment EMQ conserve-t-il les messages QoS 1/2?

10

L' EMQ (Erlang MQTT Broker) est un "courtier de messages MQTT distribué, massivement évolutif et hautement extensible" avec un rapport de "1,3 million de connexions MQTT simultanées" - il permet donc potentiellement à un grand nombre de clients de le publier et de s'y abonner. Il semble probable que certains clients puissent être déconnectés à un moment donné.

Comme cette question Que se passe-t-il si Mosquitto manque de mémoire pour stocker les messages QoS 1/2? pose des questions sur Mosquitto:

Dans MQTT, les messages avec QoS 1 ou 2 doivent être remis au moins une fois (les messages QoS 2 doivent être remis exactement une fois). Si le client n'est pas connecté, le courtier doit stocker le message jusqu'à ce que le client soit prêt à le recevoir.

Alors, comment EMQ persiste-t-il les messages QoS 1/2 jusqu'à la livraison, c'est-à-dire un redémarrage du courtier ou en ce qui concerne les limites de mémoire?

Ghanima
la source

Réponses:

6

Alors, comment EMQ persiste-t-il les messages QoS 1/2 jusqu'à la livraison, c'est-à-dire un redémarrage du courtier ou en ce qui concerne les limites de mémoire?

La réponse semble être: non . Ce problème sur leur bug tracker dit:

Je suis confronté au problème de stockage des sessions client persistantes après le redémarrage du courtier. Cette fonctionnalité n'est-elle pas actuellement présente dans le courtier ou il me manque une configuration?

Le courtier ne persistera pas les sessions.

De plus, après avoir creusé quelques problèmes supplémentaires, j'ai trouvé ce rapport :

Au départ, j'ai défini le nombre maximal de clients sur 1000 Ko dans emqttd.config. Notre machine a 8 Go de mémoire avec 4 cœurs, je suis capable de connecter facilement une connexion simultanée de 120 Ko, mais lorsqu'elle dépasse 8 Go, emqttd se termine. Ce que je pensais être un client max par machine serait bien mieux.

Essentiellement, à partir de la v2.0.5:

  • Les messages ne semblent pas être conservés dans un fichier.
  • Une fois que le courtier manque de mémoire, il se bloque simplement.

Pas exactement idéal, mais cela semble être le comportement actuel, donc si la persistance des messages est critique pour votre cas d'utilisation, utilisez un courtier différent.

Aurora0001
la source
1
Semble étrange (pour dire le moins) pour un courtier mqtt massivement évolutif.
Ghanima
Si vous recherchez un courtier MQTT distribué qui persiste les messages QoS1 / 2 sur le disque (en utilisant LevelDB), alors jetez un œil à VerneMQ ( vernemq.com ).
Lars Hesel Christensen
Mmmh alors qu'emqtt ne stocke pas le message tout seul, il peut être connecté à un certain nombre de bases de données, donc je suppose que c'est ce qu'il fait. L'avez-vous vérifié?
Fabien Papleux