Demonstre a assinatura de mensagens com o AWS IoT Device Client - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Demonstre a assinatura de mensagens com o AWS IoT Device Client

Nesta seção, você demonstrará dois tipos de assinaturas de mensagens:

  • Assinatura de tópico único

  • Assinatura de tópicos curinga

As seguintes declarações de política na política criada para esses exercícios concedem ao Raspberry Pi permissão para realizar estas ações:

  • iot:Receive

    Permite que o AWS IoT Device Client receba MQTT tópicos que correspondam aos nomeados no Resource objeto.

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

    Permite que o AWS IoT Device Client assine filtros de MQTT tópicos que correspondam aos nomeados no Resource objeto.

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

Inscrever-se em um único tópico de MQTT mensagem

Esse procedimento demonstra como o AWS IoT Device Client pode assinar e registrar MQTT mensagens.

Na janela do terminal do computador host local que está conectado ao Raspberry Pi, liste o conteúdo de ~/dc-configs/dc-pubsub-custom-config.json ou abra o arquivo em um editor de texto para examinar seu conteúdo. Localize o objeto samples, que deve ser semelhante ao seguinte.

"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 o subscribe-topic valor é o MQTT tópico no qual o AWS IoT Device Client se inscreverá quando for executado. O AWS IoT Device Client grava as cargas de mensagens que recebe dessa assinatura no arquivo nomeado no subscribe-file valor.

Para assinar um tópico de MQTT mensagem do AWS IoT Device Client
  1. Certifique-se de que a janela do terminal e a janela com o cliente MQTT de teste estejam visíveis enquanto você executa esse procedimento. Além disso, certifique-se de que seu cliente de MQTT teste ainda esteja inscrito no filtro de tópico #. Se não o for, assine novamente o filtro de tópicos #.

  2. Na janela do terminal, insira esses comandos para executar o AWS IoT Device Client usando o arquivo de configuração criado emCrie o arquivo de configuração.

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

    Na janela do terminal, o AWS IoT Device Client exibe mensagens informativas e quaisquer erros que ocorram durante a execução.

    Caso nenhum erro seja exibido na janela do terminal, continue no console do AWS IoT .

  3. No AWS IoT console, no cliente de MQTT teste, escolha a guia Publicar em um tópico.

  4. Em Nome do tópico, digite test/dc/subtopic

  5. Em Carga da mensagem, examine o conteúdo da mensagem.

  6. Escolha Publicar para publicar a MQTT mensagem.

  7. Na janela do terminal, observe a entrada da mensagem recebida do AWS IoT Device Client que se parece com esta.

    2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
  8. Depois de ver a entrada da mensagem recebida que mostra que a mensagem foi recebida, digite ^C (Ctrl-C) para interromper o AWS IoT Device Client.

  9. Digite esse comando para visualizar o final do arquivo de registro de mensagens e ver a mensagem que você publicou do cliente de MQTT teste.

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

Ao visualizar a mensagem no arquivo de log, você demonstrou que o AWS IoT Device Client recebeu a mensagem que você publicou do cliente de MQTT teste.

Inscrever-se em um tópico de várias MQTT mensagens usando caracteres curinga

Esses procedimentos demonstram como o AWS IoT Device Client pode assinar e registrar MQTT mensagens usando caracteres curinga. Para fazer isso, você deve:

  1. Atualize o filtro de tópicos que o AWS IoT Device Client usa para assinar MQTT tópicos.

  2. Atualizar a política usada pelo dispositivo para permitir novas assinaturas.

  3. Execute o AWS IoT Device Client e publique mensagens no console MQTT de teste.

Para criar um arquivo de configuração para assinar vários tópicos de MQTT mensagens usando um filtro de tópico curinga MQTT
  1. Na janela do terminal do computador host local que está conectado ao Raspberry Pi, abra ~/dc-configs/dc-pubsub-custom-config.json para edição e localize o objeto samples.

  2. No editor de texto, localize o objeto samples e atualize o valor de subscribe-topic para que se assemelhe a isto.

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

    O novo subscribe-topic valor é um filtro de MQTT tópico com um caractere MQTT curinga no final. Isso descreve uma assinatura de todos os MQTT tópicos que começam comtest/dc/. O AWS IoT Device Client grava as cargas de mensagens que recebe dessa assinatura no arquivo nomeado emsubscribe-file.

  3. Salve o arquivo de configuração modificado como ~/dc-configs/dc-pubsub-wild-config.json e saia do editor de texto.

Para modificar a política usada pelo seu Raspberry Pi para permitir a assinatura e o recebimento de vários MQTT tópicos de mensagens
  1. Na janela do terminal do seu computador host local conectado ao Raspberry Pi, em seu editor de texto favorito, abra ~/policies/pubsub_test_thing_policy.json para edição e, depois, localize as declarações de política iot::Subscribe e iot::Receive no arquivo.

  2. Na declaração de política iot::Subscribe, atualize a string no objeto Resource para substituir subtopic por *, de modo que fique semelhante ao seguinte.

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

    Os caracteres curinga do filtro de MQTT tópicos são o + (sinal de adição) e o # (sinal de libra). Uma solicitação de assinatura com # no final assina todos os tópicos que começam com a string que precede o caractere # (como, nesse caso, test/dc/).

    No entanto, o valor do recurso na declaração de política que autoriza essa assinatura deve usar um * (um asterisco) no lugar do # (um sinal de libra) no filtro de tópicos. ARN Isso ocorre porque o processador de políticas usa um caractere curinga diferente do MQTT usado.

    Para acessar mais informações sobre como usar caracteres curinga para tópicos e filtros de tópicos em políticas, consulte Usando caracteres curinga em MQTT políticas AWS IoT Core.

  3. Na declaração de política iot::Receive, atualize a string no objeto Resource para substituir subtopic por *, de modo que fique semelhante ao seguinte.

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*" ] }
  4. Salve o documento de política atualizado como ~/policies/pubsub_wild_test_thing_policy.json e saia do editor.

  5. Insira o seguinte comando para atualizar a política deste tutorial para usar as novas definições de recursos.

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

    Em caso de êxito, ele retornará uma resposta como a seguinte. Observe que policyVersionId agora é 2, o que indica que esta é a segunda versão desta política.

    Se você obteve êxito em atualizar a política, avance para o próximo procedimento.

    { "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 }

    Caso receba um erro informando que há versões da política demais para que uma nova seja salva, insira o seguinte comando para listar as versões atuais da política. Examine a lista retornada pelo comando a seguir para encontrar uma versão da política que possa ser excluída.

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

    Digite o comando a seguir para excluir uma versão que não é mais necessária. Não é possível excluir a versão padrão da política. A versão padrão da política é aquela com um valor de isDefaultVersion de true.

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

    Depois de excluir uma versão da política, tente a etapa novamente.

Com o arquivo de configuração e a política atualizados, você está pronto para demonstrar assinaturas curinga com o AWS IoT Device Client.

Para demonstrar como o AWS IoT Device Client assina e recebe vários tópicos de MQTT mensagens
  1. No cliente MQTT de teste, verifique as assinaturas. Se o cliente de MQTT teste estiver inscrito no filtro do # tópico, continue na próxima etapa. Caso contrário, no cliente de MQTT teste, na guia Inscrever-se em um tópico, em Filtro de tópicos, digite # (um caractere de libra) e, em seguida, escolha Inscrever-se para assinar.

  2. Na janela do terminal do computador host local conectado ao Raspberry Pi, execute os comandos a seguir para iniciar o AWS IoT Device Client.

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
  3. Enquanto observa a saída do AWS IoT Device Client na janela do terminal no computador host local, retorne ao cliente MQTT de teste. Na guia Publicar em um tópico, em Nome do tópico, insira test/dc/subtopic e selecione Publicar.

  4. Na janela do terminal, confirme se a mensagem foi recebida procurando uma mensagem como:

    2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
  5. Enquanto observa a saída do AWS IoT Device Client na janela do terminal do computador host local, retorne ao cliente MQTT de teste. Na guia Publicar em um tópico, em Nome do tópico, insira test/dc/subtopic2 e selecione Publicar.

  6. Na janela do terminal, confirme se a mensagem foi recebida procurando uma mensagem como:

    2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
  7. Depois de ver as mensagens que confirmam que ambas foram recebidas, digite ^C (Ctrl-C) para interromper o AWS IoT Device Client.

  8. Digite esse comando para visualizar o final do arquivo de registro de mensagens e ver a mensagem que você publicou do cliente de MQTT teste.

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

    O arquivo de log contém somente cargas de mensagens. Os tópicos de mensagens não são registrados no arquivo de log de mensagens recebidas.

    Você também pode ver a mensagem publicada pelo AWS IoT Device Client no registro recebido. Isso ocorre porque o filtro de tópicos curinga inclui esse tópico de mensagem e, por vezes, a solicitação de assinatura pode ser processada pelo agente de mensagens antes que a mensagem publicada seja enviada aos assinantes.

As entradas no arquivo de log apontam que as mensagens foram recebidas. É possível repetir esse procedimento usando outros nomes de tópicos. Todas as mensagens com um nome de tópico que comece com test/dc/ devem ser recebidas e registradas em log. Mensagens com nomes de tópicos começando com outro texto são ignoradas.

Depois de demonstrar como o AWS IoT Device Client pode publicar e assinar MQTT mensagens, continueTutorial: demonstre ações remotas (trabalhos) com o AWS IoT Device Client.