Le blog de HiveMQ répertorie les "meilleures pratiques" pour ne pas s'abonner au caractère générique à plusieurs niveaux lors de la tentative de vidage de tous les messages dans une base de données. Ils affirment que le client abonné peut ne pas être en mesure de suivre une charge élevée de messages et proposent d'utiliser un plugin de courtier pour se connecter directement au flux de messages.
Parfois, il est nécessaire de s'abonner à tous les messages, qui sont transférés via le courtier, par exemple lorsqu'ils sont tous persistants dans une base de données. Cela ne doit pas être fait en utilisant un client MQTT et en vous abonnant au caractère générique à plusieurs niveaux. La raison en est que souvent le client abonné n'est pas en mesure de traiter la charge de messages qui arrive. Surtout si vous avez un débit massif. Notre solution recommandée consiste à implémenter une extension dans le courtier MQTT, par exemple le système de plug-in de HiveMQ vous permet de vous connecter au comportement de HiveMQ et d'ajouter une routine asynchrone pour traiter chaque message entrant et le conserver dans une base de données.
Y a-t-il non plus
- un système similaire (extension / plugin) pour le courtier moustique,
- une autre méthode recommandée qui fonctionne avec le moustique, ou
- une preuve raisonnable que cette approche n'est pas nécessaire du tout, c'est-à-dire qu'un client abonné
#
peut très bien faire?
/programming//q/31584613/3984613 ne répond pas à cette question de manière exhaustive.
Cette discussion sur la liste de diffusion openHAB semble suggérer qu'il n'y a aucun problème à utiliser
#
comme abonnement pour recevoir tous les messages:Cette question Stack Overflow suggère également la même méthode:
Comme l'a souligné Bence Kaulics , la spécification précise que
#
est valide:Honnêtement, je conteste que la revendication initiale ait vraiment beaucoup de sens:
Si tel est le cas, comment le courtier pourrait-il gérer les messages en premier lieu? Tant que votre client a des caractéristiques de performances similaires au courtier, je fortement doute qu'il soit possible de submerger le client, car ce niveau de trafic submergerait également le courtier et provoquerait le blocage en premier.
En résumé, la revendication HiveMQ ne semble pas être appuyée par de nombreuses preuves provenant d'autres sources et, lorsque vous considérez ce que cela signifierait réellement, cela ne semble pas particulièrement logique.
la source
Je pense qu'il est important de considérer qu'il existe de nombreux cas d'utilisation différents pour les courtiers MQTT, comme avec n'importe quel logiciel.
La gestion des messages de discussion pour un milliard d'utilisateurs (de nombreux utilisateurs, un taux de messages relativement faible par utilisateur) est différente d'un système avec peu de clients mais un taux de messages élevé, et ils sont tous deux différents d'un système domotique (peu de clients, faible taux de messages) .
HiveMQ pense aux applications à très haut débit client / message - auquel cas la capacité du courtier dépasse certainement de loin celle d'un client.
Si vous souhaitez vous abonner
#
votre système domotique, il est très peu probable qu'il cause des problèmes. Vous pouvez vérifier et voir si le courtier utilise un processeur excessif dans tous les cas.Comme dans les autres réponses, vous abonner
#
vous donnera tous les sujets «normaux», c'est-à-dire tout ce qui ne commence pas par un$
. J'interprète la spécification comme disant que chaque sujet commençant par$
est un arbre entièrement séparé en soi, vous devez donc vous abonner à$SYS/#
,$whatever/#
pour tout obtenir . Vous ne voudrez probablement pas le faire de toute façon pour une application normale.la source