Este artículo ha sido traducido automáticamente. (Aviso legal)
Soporte de MQTT para reescritura
La función de reescritura admite el protocolo MQTT. Puede configurar directivas de reescritura para que tomen medidas en función de los parámetros de las solicitudes del cliente MQTT y las respuestas del servidor.
Acción de reescritura para MQTT
La acción de reescritura de MQTT indica los cambios realizados en la solicitud o respuesta de MQTT antes de enviarla a un servidor o cliente.
Expresión:
add rewrite action <name> <rewrite_type> <target> <rewrite_action>
Tipo de reescritura para MQTT
Según el tipo de regla de expresión de reescritura que se utilice, se admiten los siguientes tipos de reescritura de MQTT:
replace_mqtt
insert_before_mqtt
insert_after_mqtt
delete_mqtt
insert_mqtt
Reescribir el objetivo para MQTT
En los siguientes ejemplos de ejemplo, la función de reescritura de MQTT utiliza expresiones de directiva para indicar la parte de la solicitud que se va a modificar (destino) y la modificación que se va a realizar (expresión de cadena):
-
Reescriba un identificador de cliente en el paquete de conexión mediante el tipo de acción
replace_mqtt
.add rewrite action rwact1 replace_mqtt MQTT.CONNECT.CLIENTID "\"xyz\""
-
Reescribir un tema en la solicitud de publicación mediante el tipo de acción
replace_mqtt
.add rewrite action rwact1 replace_mqtt MQTT.PUBLISH.TOPIC "\"testing/test123\""
-
Reescribe para insertar una propiedad con el tipo de acción insert_mqtt.
add rewrite action rwact1 insert_mqtt MQTT.NEW_PROPERTY("prop1", "test")
-
Elimina un tema con el tipo de acción delete_mqtt.
add rewrite action rwact2 delete_mqtt MQTT.SUBSCRIBE.TOPIC_FILTERS.TOPIC(1)
Acción de reescritura para MQTT
Las siguientes son las acciones de reescritura predefinidas para MQTT:
MQTT.NEW_KEEPALIVE(interval)
MQTT.NEW_PACKET_IDENTIFIER(packetID)
MQTT.NEW_REASON_CODE(retCode)
MQTT.NEW_PUBLISH(topic_name, payload)
MQTT.NEW_CONNECT_USERNAME(username)
MQTT.NEW_CONNECT_WILL_MESSAGE(will_topic, will_payload, will_Qos, will_retain)
MQTT.NEW_TOPIC(topic, qos)
MQTT.NEW_TOPIC(topic)
MQTT.NEW_PROPERTY(key, value)
Ejemplo de la acción de reescritura predefinida:
add rewrite action rwact1 replace_mqtt MQTT.CONNECT.KEEPALIVE MQTT.NEW_KEEPALIVE(90)
Ejemplo de la acción de reescritura definida por el usuario:
add rewrite action rwact1 replace_mqtt MQTT.CONNECT.USERNAME "\"user1\""
Directiva de reescritura para MQTT
Una directiva de reescritura para MQTT consiste en una regla y una acción. La regla determina el tráfico de MQTT en el que se aplica la reescritura y la acción determina la acción que debe realizar el dispositivo NetScaler.
Expresión:
add rewrite policy <name> <rewrite_rule> <rewrite_action>
Ejemplo:
add rewrite action insert_mqtt_username insert_mqtt MQTT.NEW_CONNECT_USERNAME("user1")
add rewrite policy rewrite_mqtt_username "MQTT.COMMAND.EQ(CONNECT) && MQTT.CONNECT.USERNAME.LENGTH.EQUALS(0) insert_mqtt_username
Puntos de enlace para MQTT
Puede vincular una directiva de reescritura de forma global o a un servidor virtual de equilibrio de carga específico o a un servidor virtual de conmutación de contenido. Los siguientes son los puntos de enlace globales:
MQTT_REQ_DEFAULT
MQTT_REQ_OVERRIDE
MQTT_RES_DEFAULT
MQTT_RES_OVERRIDE
Expresión:
-
bind rewrite global <policyName> <priority> [-type MQTT_REQ_OVERRIDE | MQTT_REQ_DEFAULT | MQTT_RES_OVERRIDE | MQTT_RES_DEFAULT]
-
bind lb|cs vserver <virtualServerName> -policyName <policyName> -priority <positiveInteger> -type REQUEST|RESPONSE
Ejemplo:
-
bind rewrite global pol1 10 -type MQTT_REQ_DEFAULT
-
add/bind lb vserver v1 -policyName pol1 -type reqUEST -priority 10
Configurar una directiva de reescritura para MQTT
Para configurar una directiva de reescritura, siga los pasos y escriba los comandos en el símbolo del sistema:
-
Habilite la función de reescritura en el dispositivo NetScaler.
enable ns feature REWRITE
-
Agregue una acción de reescritura.
add rewrite action rwact1 replace_mqtt MQTT.CONNECT.KEEPALIVE MQTT.NEW_KEEPALIVE(10)
-
Agregue una directiva de reescritura.
add rewrite policy pol1 MQTT.COMMAND.EQ(CONNECT) rwact1
-
Configure un servidor virtual de equilibrio de carga MQTT.
add lb vserver v1 MQTT 1.1.1.1 1883
-
Enlazar la directiva de reescritura de forma global o a un servidor virtual de equilibrio de carga específico.
bind rewrite global pol1 10 -type MQTT_REQ_DEFAULT
add/bind lb vserver v1 -policyName pol1 -type REQUEST -priority 10
Caso de uso 1: Reemplace el nombre de usuario en el mensaje MQTT CONNECT por el nombre del certificado
El administrador puede configurar una directiva de reescritura de MQTT para reemplazar el nombre de usuario por el nombre del certificado del cliente.
Vamos a considerar un ejemplo. La solicitud del cliente tiene un mensaje MQTT CONNECT
que contiene el nombre de usuario como “admin”. Este nombre de usuario debe reemplazarse por el número de serie (16 dígitos) que se extrae del certificado de cliente (nombre del certificado).
En la siguiente ilustración se muestra el flujo de trabajo:
-
Se envía una solicitud de Protocolo de control de transporte (TCP) al equilibrador de carga.
-
En el equilibrador de carga, el nombre de usuario se reemplaza por el nombre del certificado.
-
La solicitud se reenvía al intermediario de MQTT.
-
Este nuevo nombre de usuario se usa para la autorización a través de la carga útil de webhook.
Ejemplo de configuración:
add rewrite action mqtt_rw_unameact1 replace_mqtt MQTT.CONNECT.USERNAME CLIENT.SSL.CLIENT_CERT.SERIALNUMBER
add rewrite policy mqtt_rw_uname_pol1 "MQTT.COMMAND.EQ(CONNECT)" mqtt_rw_unameact1
bind cs vserver mqtt_frontend_cs -policyName mqtt_rw_uname_pol1 -priority 10 -gotoPriorityExpression END -type REQUEST
Caso de uso 2: Proporcionar una suscripción a un nuevo TEMA
El administrador puede proporcionar una suscripción a un TEMA nuevo. Vamos a considerar un ejemplo. La solicitud de un cliente tiene una suscripción al TEMA 1. El administrador puede configurar una directiva de reescritura para proporcionar suscripción a un nuevo TEMA 2. La suscripción se puede insertar antes o después.
Ejemplo de configuración:
-
add rewrite action act2 insert_before_mqtt MQTT.TOPIC_FILTERS.TOPIC(1) MQTT.NEW_TOPIC(topic2, 2)
-
add rewrite policy policy2 “MQTT.COMMAND.EQ(SUBSCRIBE) && MQTT.SUBSCRIBE. TOPIC_FILTERS.TOPIC.CONTAINS(\"test\")" act2
En este artículo
- Acción de reescritura para MQTT
- Directiva de reescritura para MQTT
- Puntos de enlace para MQTT
- Configurar una directiva de reescritura para MQTT
- Caso de uso 1: Reemplace el nombre de usuario en el mensaje MQTT CONNECT por el nombre del certificado
- Caso de uso 2: Proporcionar una suscripción a un nuevo TEMA