Verificación de inicio de sesión de configuración EMQX del servidor MQTT y notificación fuera de línea del cliente

descripción general

En el proceso de uso pythony desarrollo, MQTTel mecanismo de suscripción de mensajes se utiliza para cumplir con los requisitos comerciales. Uno de ellos es que los clientes que se suscriben a los mensajes necesitan recibir 上线与下线mensajes push sobre los servidores MQTT de otros clientes. Aquí hay un registro de los pasos y precauciones de implementación.

Plataforma del sistema operativo y versión del software :

  • Sistema operativo:Windows 10
  • versión emqx:emqx 4.3

Los pasos principales para realizar son :

  1. Cambiar el mecanismo de verificación de la suscripción del cliente, es decir, 是否允许匿名登录de permitir a no permitir
  2. Cree un nombre de usuario y una contraseña de administrador, y otórguele el permiso de suscripción de mensajes instantáneos del sistema (el cierre de sesión del cliente y las notificaciones fuera de línea son mensajes a nivel del sistema)
  3. Inicie la función de complemento de verificación de nombre de usuario y contraseña

Las principales consideraciones :

  • emqxLa diferencia de versión ( emqx 4.3la versión 4.2es diferente del método de configuración de la versión anterior)
  • Una vez completada la modificación del archivo de configuración, el servidor eqmx debe reiniciarse para que surta efecto.

Procedimientos de operación

emqx 4.2y versiones anteriores

emqx 4.2Cómo cambiar el nombre de usuario y la contraseña de inicio de sesión en versiones anteriores se puede recuperar a través de motores de búsqueda.Hay una gran cantidad de documentos o blogs técnicos con instrucciones, por lo que no los repetiré aquí.

versión emqx 4.3

Modificar la configuración de autenticación de inicio de sesión anónimo

Suponiendo que emqx está instalado en D:\el disco, el tutorial de instalación , en este momento, abra el archivo de configuración del sistema, ubicado en d:\emqx\etc\emqx.conf, abra en modo texto, modifique el elemento de configuración allow_anonymouscomo false, antes de la modificación, el valor predeterminado del sistema true:

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

Después de la modificación, guarde y salga.

Abra el complemento de verificación de inicio de sesión

Inicie sesión 127.0.0.1:18083, ingrese el nombre de cuenta predeterminado adminy la contraseña predeterminada publicpara iniciar sesión en la consola, haga clic en la barra de navegación izquierda Plugins(la interfaz china muestra es 插件) y emqx_auth_mnesiacomience

Antes de la versión Emqx4.3, había una emqx_auth_usernameextensión que podía emqx_auth_usernamemodificar su configuración iniciando el módulo de complemento para verificar la cuenta y la contraseña.
Pero Emqx 4.3es diferente después de la versión. El documento oficial indica que emqx 4.3en la versión emqx_auth_clientidy emqx_auth_usernmaese fusiona con emqx_auth_mnesia. emqx_auth_usernameA partir de ahora, el módulo está obsoleto. Emqx 4.3Cargar el complemento en la versión emq_auth_usernameinformará un error que no existe, así que no busque emqx_auth_usernamemás el módulo de instalación. Modifique directamente emqx_auth_mnesia.confel archivo de configuración del módulo y agregue la contraseña de la cuenta.

Añadir nombre de usuario y contraseña

Busque emqx_auth_mnesiael archivo de configuración correspondiente al complemento, ubicado en D:\emqx\etc\plugins\emqx_auth_mnesia.conf, agregue el siguiente nombre de usuario y contraseña:

## 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

Guardar y Salir.

Modificar archivos de configuración de control de acceso

Abra d:\emqx\etc\acl.conf, agregue una línea de configuración de acceso de usuario:

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

Permite admina los usuarios suscribirse a mensajes a nivel del sistema. Guardar y salir, reiniciar emqxel servicio

Suscripción de mensajes del sistema para el cliente en línea y fuera de línea

Los mensajes en línea y fuera de línea del cliente son notificaciones a nivel del sistema, que requieren que el cliente se suscriba a los predefinidos del sistema topic:

  • tema sin conexión$SYS/brokers/+/clients/+/disconnected

  • tema en línea$SYS/brokers/+/clients/+/connected

  • Tema en línea y fuera de línea$SYS/brokers/+/clients/#

Código de muestra:

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()

Después de que se ejecuta el código anterior, si otros clientes se conectan o desconectan, on_message()se vuelve a llamar al método aquí y se recupera el mensaje de cierre de sesión del sistema, de la siguiente manera:

客户端上线 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"
}

Las expresiones regulares se pueden usar r"^\$SYS\/brokers\/.*\/clients\/.*\/(dis)?connected"para hacer coincidir y filtrar mensajes en línea y fuera de línea para el procesamiento de lógica empresarial.

Supongo que te gusta

Origin blog.csdn.net/LJX_ahut/article/details/119189984
Recomendado
Clasificación