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.
Demuestre la suscripción a los mensajes con el cliente del dispositivo AWS IoT
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
Otorga permiso al cliente del AWS IoT dispositivo para recibir MQTT temas que coincidan con los nombrados en el
Resource
objeto.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
-
iot:Subscribe
Otorga al cliente del AWS IoT dispositivo permiso para suscribirse a filtros de MQTT temas que coincidan con los nombres del
Resource
objeto.{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }
Suscríbase a un tema de un solo MQTT mensaje
Este procedimiento demuestra cómo el cliente del AWS IoT dispositivo puede suscribirse a los MQTT mensajes 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 subscribe-topic
valor es el MQTT tema al que se suscribirá el cliente del AWS IoT dispositivo cuando se ejecute. El cliente del AWS IoT dispositivo escribe las cargas útiles de mensajes que recibe de esta suscripción en el archivo mencionado en el subscribe-file
valor.
Para suscribirse a un tema de MQTT mensajes desde el cliente del AWS IoT dispositivo
-
Asegúrese de que tanto la ventana del terminal como la ventana con el cliente de MQTT prueba estén visibles mientras realiza este procedimiento. Además, asegúrese de que su cliente de MQTT prueba siga suscrito al filtro de temas #. Si no lo está, vuelva a suscribirse al filtro de temas #.
-
En la ventana del terminal, introduzca estos comandos para ejecutar el AWS IoT Device Client utilizando el archivo de configuración creado enCrear 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, el cliente del AWS IoT dispositivo 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 .
-
En la AWS IoT consola, en el cliente MQTT de prueba, selecciona la pestaña Publicar en un tema.
-
En Nombre del tema, introduzca
test/dc/subtopic
-
En Carga útil del mensaje, revise el contenido del mensaje.
-
Selecciona Publicar para publicar el MQTT mensaje.
-
En la ventana del terminal, observe la entrada de mensaje recibida del cliente del AWS IoT dispositivo que tiene este aspecto.
2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
-
Cuando veas la entrada del mensaje recibido que indica que se ha recibido el mensaje, introduce
^C
(Ctrl-C) para detener el cliente del AWS IoT dispositivo. -
Introduzca este comando para ver el final del archivo de registro de mensajes y ver el mensaje que publicó desde el cliente de MQTTprueba.
tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
Al ver el mensaje en el archivo de registro, ha demostrado que el cliente del AWS IoT dispositivo recibió el mensaje que usted publicó desde el cliente de MQTT prueba.
Suscríbase a MQTT un tema de varios mensajes utilizando caracteres comodín
Estos procedimientos demuestran cómo el cliente del AWS IoT dispositivo puede suscribirse a los MQTT mensajes y registrarlos con caracteres comodín. Para ello, deberá:
-
Actualice el filtro de temas que el cliente del AWS IoT dispositivo utiliza para suscribirse a los MQTT temas.
-
Actualizar la política utilizada por el dispositivo para permitir las nuevas suscripciones.
-
Ejecute el cliente del AWS IoT dispositivo y publique los mensajes desde la consola MQTT de prueba.
Para crear un archivo de configuración para suscribirse a varios temas de MQTT mensajes mediante un filtro de MQTT temas comodín
-
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 objetosamples
. -
En el editor de texto, localice el objeto
samples
y actualice el valorsubscribe-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
subscribe-topic
valor es un filtro de MQTT temas con un carácter MQTT comodín al final. Esto describe una suscripción a todos los MQTT temas que comiencen portest/dc/
. El cliente del AWS IoT dispositivo escribe las cargas útiles de mensajes que recibe de esta suscripción ensubscribe-file
el archivo mencionado. -
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 para permitir la suscripción y la recepción de varios MQTT temas de mensajes
-
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 deiot::Subscribe
yiot::Receive
en el archivo. -
En la declaración de política
iot::Subscribe
, actualice la cadena del objeto Resource para reemplazarsubtopic
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 MQTT temas son el
+
(signo más) y el#
(signo de libra). 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 en la declaración de política que autoriza esta suscripción debe incluir un
*
(asterisco) en lugar del#
(un signo de almohadilla) en el filtro de temas. ARN Esto se debe a que el procesador de políticas utiliza un carácter comodín diferente del que MQTT utiliza.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 las políticas y políticas MQTT AWS IoT Core.
-
En la declaración de política
iot::Receive
, actualice la cadena del objeto Resource para reemplazarsubtopic
por*
, de forma que tenga el siguiente aspecto.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/
*
" ] } -
Guarde el documento de política actualizado como
~/policies/pubsub_wild_test_thing_policy.json
y salga del editor. -
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 es2
, 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
detrue
.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, podrá demostrar las suscripciones comodín con el AWS IoT Device Client.
Para demostrar cómo el cliente del AWS IoT dispositivo se suscribe y recibe varios temas de MQTT mensajes
-
En el cliente MQTT de prueba, compruebe las suscripciones. Si el cliente de MQTT prueba está suscrito al filtro del
#
tema, continúe con el siguiente paso. Si no es así, en el cliente de MQTT prueba, en la pestaña Suscribirse a un tema, en el filtro de temas, introduce#
(un signo de almohadilla) y, a continuación, selecciona Suscribirse para suscribirte a él. -
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
-
Mientras observa el resultado del AWS IoT Device Client en la ventana del terminal del equipo host local, regrese al cliente de MQTT prueba. En la pestaña Publicar en un tema, en Nombre del tema, introduzca
test/dc/subtopic
y, a continuación, seleccione Publicar. -
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
-
Mientras observa el resultado del AWS IoT Device Client en la ventana del terminal de la computadora host local, regrese al cliente de MQTT prueba. En la pestaña Publicar en un tema, en Nombre del tema, introduzca
test/dc/subtopic2
y, a continuación, seleccione Publicar. -
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
-
Cuando vea los mensajes que confirman la recepción de ambos mensajes, introduzca
^C
(Ctrl-C) para detener el AWS IoT Device Client. -
Introduzca este comando para ver el final del archivo de registro de mensajes y ver el mensaje que publicó desde el cliente de MQTTprueba.
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 veas el mensaje publicado por el cliente del AWS IoT dispositivo 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 el cliente del AWS IoT dispositivo puede publicar MQTT mensajes y suscribirse a ellos, continúe haciéndoloTutorial: Demostrar acciones remotas (trabajos) con AWS IoT Device Client.