Paso 3: Demostrar la suscripción de mensajes con AWS IoT Device Client - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Paso 3: Demostrar la suscripción de mensajes con AWS IoT Device Client

En esta sección, mostrará dos tipos de suscripciones de mensajes:

  • Suscripción a un solo tema

  • Suscripción a un tema comodín

Estas declaraciones en la política creadas para estos ejercicios dan permiso a la Raspberry Pi para realizar estas acciones:

  • iot:Receive

    Da permiso a AWS IoT Device Client para recibir temas de MQTT que coincidan con los nombrados en el objeto Resource.

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
  • iot:Subscribe

    Da permiso a AWS IoT Device Client para suscribirse a temas de MQTT que coincidan con los nombrados en el objeto Resource.

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }

Suscripción a un solo tema de mensaje de MQTT

Este procedimiento demuestra cómo AWS IoT Device Client puede suscribirse a los mensajes de MQTT y registrarlos.

En la ventana del terminal de un ordenador host local que esté conectado a su Raspberry Pi, enumere el contenido de ~/dc-configs/dc-pubsub-custom-config.json o abra el archivo en un editor de texto para revisarlo. Localice el objeto samples. Debería tener este aspecto.

"samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/subtopic", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

Observe que el valor subscribe-topic es el tema de MQTT al que AWS IoT Device Client se suscribirá cuando se ejecute. AWS IoT Device Client escribe las cargas de los mensajes que recibe de esta suscripción en el archivo mencionado en el valor subscribe-file.

Para suscribirse a un tema de mensajes de MQTT desde AWS IoT Device Client
  1. Asegúrese de que tanto la ventana del terminal como la ventana con el cliente de prueba de MQTT estén visibles mientras realiza este procedimiento. Además, verifique que su cliente de prueba de MQTT siga suscrito al filtro de temas #. Si no lo está, vuelva a suscribirse al filtro de temas #.

  2. En la ventana del terminal, introduzca estos comandos para ejecutar AWS IoT Device Client mediante el archivo de configuración creado en Crear el archivo de configuración.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json

    En la ventana del terminal, AWS IoT Device Client muestra los mensajes de información y cualquier error que se produzca durante su ejecución.

    Si no se muestra ningún error en la ventana del terminal, continúe en la consola de AWS IoT.

  3. En la consola de AWS IoT, en el cliente de prueba de MQTT, elija la pestaña Publicar en un tema.

  4. En Nombre del tema, introduzca test/dc/subtopic

  5. En Carga útil del mensaje, revise el contenido del mensaje.

  6. Elija Publicar para publicar el mensaje de MQTT.

  7. En la ventana del terminal, busque la entrada de mensaje recibido de AWS IoT Device Client que tenga este aspecto.

    2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
  8. Cuando vea la entrada mensaje recibido que indica que se ha recibido el mensaje, introduzca ^C (Ctrl-C) para detener AWS IoT Device Client.

  9. Introduzca este comando para ver el final del archivo de registro de mensajes y ver el mensaje que publicó desde el cliente de prueba de MQTT.

    tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log

Al ver el mensaje en el archivo de registro, ha demostrado que AWS IoT Device Client recibió el mensaje que usted publicó desde el cliente de prueba de MQTT.

Suscribirse a varios temas de mensajes de MQTT utilizando caracteres comodín

Estos procedimientos demuestran cómo AWS IoT Device Client puede suscribirse y registrar mensajes de MQTT utilizando caracteres comodín. Para ello, deberá:

  1. Actualizar el filtro de temas que AWS IoT Device Client utiliza para suscribirse a los temas de MQTT.

  2. Actualizar la política utilizada por el dispositivo para permitir las nuevas suscripciones.

  3. Ejecutar AWS IoT Device Client y publicar los mensajes desde la consola de pruebas de MQTT.

Para crear un archivo de configuración y suscribirse a varios temas de mensajes de MQTT mediante un filtro de temas de MQTT con caracteres comodín
  1. En la ventana del terminal de su ordenador host local conectado a la Raspberry Pi, abra para ~/dc-configs/dc-pubsub-custom-config.json para editar y localice el objeto samples.

  2. En el editor de texto, localice el objeto samples y actualice el valor subscribe-topic para que tenga este aspecto.

    "samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/#", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

    El nuevo valor subscribe-topic es un filtro de temas de MQTT con un carácter comodín de MQTT al final. Esto describe una suscripción a todos los temas de MQTT que comiencen con test/dc/. AWS IoT Device Client escribe las cargas de los mensajes que recibe de esta suscripción en el archivo mencionado en subscribe-file.

  3. Guarde el archivo de configuración modificado como ~/dc-configs/dc-pubsub-wild-config.json y salga del editor de texto.

Para modificar la política utilizada por su Raspberry Pi y permitir la suscripción y la recepción de varios temas de mensajes de MQTT
  1. En la ventana del terminal de su ordenador host local que esté conectado a la Raspberry Pi, en el editor de texto que prefiera, abra ~/policies/pubsub_test_thing_policy.json para su edición y luego busque las declaraciones de política de iot::Subscribe y iot::Receive en el archivo.

  2. En la declaración de política iot::Subscribe, actualice la cadena del objeto Resource para reemplazar subtopic por *, de forma que tenga el siguiente aspecto.

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*" ] }
    nota

    Los caracteres comodín del filtro de temas de MQTT son + (signo más) y # (signo de almohadilla). Una solicitud de suscripción con un símbolo # al final suscribe todos los temas que comiencen por la cadena que precede al carácter # (por ejemplo, test/dc/ en este caso).

    Sin embargo, el valor del recurso de la declaración de política que autoriza esta suscripción debe usar * (un asterisco) en lugar de # (signo de almohadilla) en el ARN del filtro de temas. Esto se debe a que el procesador de políticas utiliza un carácter comodín diferente al que utiliza MQTT.

    Para obtener más información sobre el uso de caracteres comodín en los temas y los filtros de temas en las políticas, consulte Uso de caracteres comodín en y MQTT AWS IoT Core políticas.

  3. En la declaración de política iot::Receive, actualice la cadena del objeto Resource para reemplazar subtopic por *, de forma que tenga el siguiente aspecto.

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*" ] }
  4. Guarde el documento de política actualizado como ~/policies/pubsub_wild_test_thing_policy.json y salga del editor.

  5. Introduzca este comando para actualizar la política de este tutorial con el fin de utilizar las nuevas definiciones de recursos.

    aws iot create-policy-version \ --set-as-default \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"

    Si el comando se ejecuta correctamente, devuelve una respuesta como esta. Observe que policyVersionId ahora es 2, lo que indica que esta es la segunda versión de esta política.

    Si ha actualizado correctamente la política, puede continuar con el siguiente procedimiento.

    { "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Publish\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Subscribe\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Receive\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n ]\n }\n ]\n}\n", "policyVersionId": "2", "isDefaultVersion": true }

    Si aparece un error que indica que hay demasiadas versiones de la política como para guardar una nueva, introduzca este comando para ver una lista de las versiones actuales de la política. Revise la lista que devuelve este comando para buscar una versión de la política que pueda eliminar.

    aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"

    Introduzca este comando para eliminar una versión que ya no necesite. Tenga en cuenta que no puede eliminar la versión de política predeterminada. La versión de política predeterminada es la que tiene un valor isDefaultVersion de true.

    aws iot delete-policy-version \ --policy-name "PubSubTestThingPolicy" \ --policy-version-id policyId

    Tras eliminar una versión de la política, vuelva a intentar este paso.

Con el archivo de configuración y la política actualizados, estará listo para hacer una demostración de las suscripciones estándar con AWS IoT Device Client.

Para demostrar cómo AWS IoT Device Client se suscribe y recibe varios temas de mensajes de MQTT
  1. En el cliente de prueba de MQTT, compruebe las suscripciones. Si el cliente de pruebas de MQTT está suscrito al filtro incluido en el tema #, continúe con el siguiente paso. De lo contrario, en el cliente de prueba de MQTT, en la pestaña Suscribirse a un tema, en Filtro de temas, introduzca # (un carácter de almohadilla) y, a continuación, seleccione Suscribirse para suscribirse.

  2. En la ventana del terminal de su ordenador host local conectado a su Raspberry Pi, introduzca estos comandos para iniciar AWS IoT Device Client.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
  3. Mientras observa el resultado de AWS IoT Device Client en la ventana del terminal del ordenador host local, vuelva al cliente de prueba de MQTT. En la pestaña Publicar en un tema, en Nombre del tema, introduzca test/dc/subtopic y, a continuación, seleccione Publicar.

  4. En la ventana del terminal, confirme que el mensaje se ha recibido buscando un mensaje como:

    2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
  5. Mientras observa el resultado de AWS IoT Device Client en la ventana del terminal del ordenador host local, vuelva al cliente de prueba de MQTT. En la pestaña Publicar en un tema, en Nombre del tema, introduzca test/dc/subtopic2 y, a continuación, seleccione Publicar.

  6. En la ventana del terminal, confirme que el mensaje se ha recibido buscando un mensaje como:

    2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
  7. Cuando vea los mensajes que confirman la recepción de ambos mensajes, introduzca ^C (Ctrl-C) para detener AWS IoT Device Client.

  8. Introduzca este comando para ver el final del archivo de registro de mensajes y ver el mensaje que publicó desde el cliente de prueba de MQTT.

    tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
    nota

    El archivo de registro contiene solo cargas de mensajes. Los temas de los mensajes no se registran en el archivo de registro de mensajes recibidos.

    Es posible que también vea el mensaje publicado por AWS IoT Device Client en el registro recibido. Esto se debe a que el filtro de temas comodín incluye ese tema del mensaje y, en ocasiones, el agente de mensajes puede procesar la solicitud de suscripción antes de enviar el mensaje publicado a los suscriptores.

Las entradas del archivo de registro demuestran que se recibieron los mensajes. Puede repetir este procedimiento utilizando otros nombres de temas. Se deben recibir y registrar todos los mensajes que tengan un nombre de tema que comience por test/dc/. Se ignoran los mensajes con nombres de temas que comiencen por cualquier otro texto.

Tras demostrar cómo AWS IoT Device Client puede publicar mensajes de MQTT y suscribirse a ellos, continúe con Tutorial: Demuestre acciones remotas (trabajos) con el AWS IoT Cliente de dispositivo.