Vérification de la connexion aux paramètres EMQX du serveur MQTT et notification hors ligne du client

aperçu

Dans le processus d'utilisation pythonet de développement, MQTTle mécanisme d'abonnement aux messages est utilisé pour répondre aux besoins de l'entreprise. L'un d'eux est que les clients qui s'abonnent aux messages doivent recevoir 上线与下线des messages push sur les serveurs MQTT des autres clients. Voici un compte rendu des étapes de mise en œuvre et des précautions.

Plate-forme du système d'exploitation et version du logiciel :

  • système opérateur:Windows 10
  • version emqx :emqx 4.3

Les principales étapes à réaliser sont :

  1. Modifier le mécanisme de vérification de l'abonnement du client, c'est-à-dire 是否允许匿名登录d'autoriser à interdire
  2. Créez un nom d'utilisateur et un mot de passe d'administrateur et donnez-lui l'autorisation d'abonnement aux messages instantanés du système (la déconnexion du client et les notifications hors ligne sont des messages au niveau du système)
  3. Démarrer la fonction de plug-in de vérification du nom d'utilisateur et du mot de passe

Les principales considérations :

  • emqxLa différence de version ( emqx 4.3la version 4.2est différente de la méthode de réglage de la version précédente)
  • Une fois la modification du fichier de configuration terminée, le serveur eqmx doit être redémarré pour prendre effet

Modes opératoires

emqx 4.2et versions précédentes

emqx 4.2Comment changer le nom d'utilisateur et le mot de passe de connexion dans les versions précédentes peut être récupéré via les moteurs de recherche.Il existe un grand nombre de documents ou de blogs techniques avec des instructions, je ne les répéterai donc pas ici.

version emqx 4.3

Modifier les paramètres d'authentification de connexion anonyme

En supposant qu'emqx est installé sur D:\le disque, le tutoriel d'installation , à ce moment, ouvre le fichier de configuration du système, situé dans d:\emqx\etc\emqx.conf, ouvert en mode texte, modifie l'élément de configuration allow_anonymouscomme false, avant modification, la valeur par défaut du système true:

## Allow anonymous authentication by default if no auth plugins loaded.
## Notice: Disable the option in production deployment!
##
## Value: true | false
allow_anonymous = false

Après modification, enregistrez et quittez.

Ouvrez le plugin de vérification de connexion

Connectez-vous 127.0.0.1:18083, entrez le nom du compte par défaut adminet le mot de passe par défaut publicpour vous connecter à la console, cliquez sur la barre de navigation de gauche Plugins(l'interface chinoise indique 插件) et emqx_auth_mnesiadémarrez

Avant la version Emqx4.3, il y avait une emqx_auth_usernameextension, qui pouvait emqx_auth_usernamemodifier sa configuration en démarrant le module plug-in pour vérifier le compte et le mot de passe.
Mais Emqx 4.3c'est différent après la version.Le document officiel indique que emqx 4.3dans la version emqx_auth_clientidet emqx_auth_usernmaeest fusionné dans emqx_auth_mnesia. emqx_auth_usernameLe module est désormais obsolète. Emqx 4.3Le chargement du plug-in dans la version emq_auth_usernamerapportera une erreur qui n'existe pas, alors ne cherchez emqx_auth_usernameplus le module d'installation. Modifiez directement emqx_auth_mnesia.confle fichier de configuration du module et ajoutez le mot de passe du compte.

Ajouter un nom d'utilisateur et un mot de passe

Recherchez emqx_auth_mnesiale fichier de configuration correspondant au plug-in, situé dans D:\emqx\etc\plugins\emqx_auth_mnesia.conf, ajoutez le nom d'utilisateur et le mot de passe suivants :

## Password hash.
##
## Value: plain | md5 | sha | sha256 | sha512
auth.mnesia.password_hash = sha256

##--------------------------------------------------------------------
## ClientId Authentication
##--------------------------------------------------------------------

auth.client.1.clientid = admin
auth.client.1.password = your_own_password

##--------------------------------------------------------------------
## Username Authentication
##--------------------------------------------------------------------

## Examples:
auth.user.1.username = admin
auth.user.1.password = your_own_password

Sauvegarder et quitter.

Modifier les fichiers de configuration du contrôle d'accès

Ouvrez d:\emqx\etc\acl.conf, ajoutez une ligne de configuration d'accès utilisateur :

{allow, {user, "admin"}, subscribe, ["$SYS/#"]}.

Permet adminaux utilisateurs de s'abonner aux messages au niveau du système. Enregistrez et quittez, redémarrez emqxle service

Abonnement aux messages système pour le client en ligne et hors ligne

Les messages client hors ligne et en ligne sont des notifications au niveau du système, qui nécessitent que le client s'abonne aux paramètres prédéfinis du systèmetopic :

  • sujet hors ligne$SYS/brokers/+/clients/+/disconnected

  • sujet en ligne$SYS/brokers/+/clients/+/connected

  • Sujet en ligne et hors ligne$SYS/brokers/+/clients/#

Exemple de code :

def on_connect(client, userdata, flags, rc):
	# this method will be called when client connected to server successfully
	# TODO do something when this client been notified about successfully connected to server
    pass


def on_message(client, userdata, msg: mqtt.MQTTMessage):
	# this method will be called when this client get a message under the topic(s) it subscribed, encluding the system message (I assuming you've already configure it properly)
	# TODO do something when this client get a message
    pass


mqtt_server = "127.0.0.1"
client = mqtt.Client("surveillance_client")
client.username_pw_set("admin", "aoto@123")
# 定义回调方法
client.on_connect = on_connect
client.on_message = on_message
# 600为keepalive的时间间隔
client.connect(mqtt_server, 1883, 600)
client.subscribe('surveillance', qos=0)
client.subscribe(r"$SYS/brokers/+/clients/#", qos=0)
# 启动mqtt消息订阅(非阻塞式)
client.loop_start()

Une fois le code ci-dessus exécuté, si d'autres clients se connectent ou se déconnectent, on_message()la méthode est rappelée ici et le message de déconnexion du système est récupéré, comme suit :

客户端上线 topic:  $SYS/brokers/[email protected]/clients/654321/connected
客户端上线消息报文 :
{
  "username": "admin",
  "ts": 1627476021893,
  "sockport": 1883,
  "proto_ver": 4,
  "proto_name": "MQTT",
  "keepalive": 600,
  "ipaddress": "127.0.0.1",
  "expiry_interval": 0,
  "connected_at": 1627476021893,
  "connack": 0,
  "clientid": "654321",
  "clean_start": true
}

客户端下线 topic:  $SYS/brokers/[email protected]/clients/654321/disconnected
客户端下线消息报文 :

{
  "username": "admin",
  "ts": 1627476028659,
  "reason": "tcp_closed",
  "disconnected_at": 1627476028659,
  "clientid": "654321"
}

Les expressions régulières peuvent être utilisées r"^\$SYS\/brokers\/.*\/clients\/.*\/(dis)?connected"pour faire correspondre et filtrer les messages en ligne et hors ligne pour le traitement de la logique métier.

Je suppose que tu aimes

Origine blog.csdn.net/LJX_ahut/article/details/119189984
conseillé
Classement