MQTT - 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á.

MQTT

O MQTT (Message Queuing Telemetry Transport) é um protocolo de mensagens leve e amplamente adotado, projetado para dispositivos restritos. O suporte a AWS IoT Core para MQTT é baseado na especificação MQTT v3.1.1 e na especificação MQTT v5.0, com algumas diferenças, conforme documentado em AWS IoT diferenças em relação às especificações do MQTT. Como a versão mais recente do padrão, o MQTT 5 apresenta vários recursos principais que tornam um sistema baseado em MQTT mais robusto, incluindo novos aprimoramentos de escalabilidade, relatório de erros aprimorado com respostas de código de motivo, temporizadores de expiração de mensagens e sessões e cabeçalhos de mensagens de usuário personalizados. Para obter mais informações sobre os recursos compatíveis com o MQTT 5, consulte Recursos compatíveis com o MQTT 5. AWS IoT Core AWS IoT Core também suporta comunicação entre versões MQTT (MQTT 3 e MQTT 5). Um publicador do MQTT 3 pode enviar uma mensagem do MQTT 3 para um assinante do MQTT 5 que receberá uma mensagem de publicação do MQTT 5 e vice-versa.

AWS IoT Core suporta conexões de dispositivos que usam o protocolo MQTT e o protocolo MQTT over WSS e que são identificadas por um ID de cliente. O AWS IoT SDKs de dispositivos dá suporte a ambos os protocolos e são as formas recomendadas de conectar dispositivos a AWS IoT Core. Os AWS IoT Device SDKs oferecem suporte às funções necessárias para que dispositivos e clientes se conectem e acessem AWS IoT os serviços. Os Device SDKs oferecem suporte aos protocolos de autenticação exigidos AWS IoT pelos serviços e aos requisitos de ID de conexão exigidos pelos protocolos MQTT e MQTT over WSS. Para obter informações sobre como se conectar ao AWS IoT uso dos AWS Device SDKs e links para exemplos de AWS IoT nos idiomas suportados, consulteConectando-se ao MQTT usando os SDKs do AWS IoT dispositivo. Para obter mais informações sobre métodos de autenticação e os mapeamentos de porta para mensagens MQTT, consulte Protocolos, mapeamentos de porta e autenticação.

Embora seja recomendável usar os AWS IoT Device SDKs para se conectar AWS IoT, eles não são obrigatórios. No entanto, se você não usar os SDKs do AWS IoT dispositivo, deverá fornecer a segurança necessária de conexão e comunicação. Os clientes devem enviar a extensão TLS de Server Name Indication (SNI) na solicitação de conexão. As tentativas de conexão que não incluem o SNI são recusadas. Para obter mais informações, consulte Segurança de transporte em AWS IoT. Clientes que usam usuários e AWS credenciais do IAM para autenticar clientes devem fornecer a autenticação correta do Signature versão 4.

Conectando-se ao MQTT usando os SDKs do AWS IoT dispositivo

Esta seção contém links para os AWS IoT Device SDKs e para o código-fonte de programas de amostra que ilustram como conectar um dispositivo a. AWS IoT Os aplicativos de amostra vinculados aqui mostram como se conectar AWS IoT usando o protocolo MQTT e o MQTT pelo WSS.

nota

Os AWS IoT Device SDKs lançaram um cliente MQTT 5.

C++

Usando o SDK de dispositivos AWS IoT C++ para conectar dispositivos

Python

Usando o AWS IoT Device SDK para Python para conectar dispositivos

JavaScript

Usando o AWS IoT Device SDK para JavaScript conectar dispositivos

Java

Usando o AWS IoT Device SDK for Java para conectar dispositivos

nota

O AWS IoT Device SDK for Java v2 agora oferece suporte ao desenvolvimento para Android. Para obter mais informações, consulte AWS IoT Device SDK for Android.

Embedded C

Usando o AWS IoT Device SDK for Embedded C para conectar dispositivos

Importante

Esse SDK é destinado ao uso por desenvolvedores experientes de software incorporado.

Opções de Qualidade de serviço (QoS) do MQTT

AWS IoT e os AWS IoT Device SDKs suportam os níveis de Qualidade de Serviço (QoS) do MQTT e. 0 1 O protocolo MQTT define um terceiro nível de QoS, 2 nível, AWS IoT mas não o suporta. Apenas o protocolo MQTT dá suporte ao atributo de QoS. HTTPS dá suporte a QoS passando um parâmetro de string de consulta ?qos=qos em que o valor pode ser 0 ou 1.

Essa tabela descreve como cada nível de QoS afeta as mensagens publicadas para e pelo agente de mensagens.

Com um nível de QoS de...

A mensagem é…

Comentários

QoS nível 0

Enviado zero ou mais vezes

Esse nível deve ser usado para mensagens enviadas por links de comunicação confiáveis ou que podem ser perdidas sem problemas.

QoS nível 1

Enviado pelo menos uma vez e, em seguida, de modo repetido até que uma resposta PUBACK seja recebida

A mensagem não é considerada completa até que o remetente receba uma resposta PUBACK indicando a entrega bem-sucedida.

Sessões persistentes do MQTT

As sessões persistentes armazenam as assinaturas e mensagens de um cliente, com uma Qualidade de Serviço (QoS) de 1, que não foram reconhecidas pelo cliente. Quando o dispositivo se reconecta a uma sessão persistente, a sessão é retomada, as assinaturas são restabelecidas e as mensagens assinadas não confirmadas que são recebidas e armazenadas antes da reconexão são enviadas ao cliente.

O processamento das mensagens armazenadas é registrado em CloudWatch e CloudWatch Logs. Para obter informações sobre as entradas gravadas em CloudWatch e CloudWatch Logs, consulte Métricas do agente de mensagens Entrada de log em fila e.

Criar uma sessão persistente

No MQTT 3, você cria uma sessão persistente do MQTT enviando uma mensagem CONNECT e definindo o sinalizador cleanSession como 0. Se nenhuma sessão existir para o cliente enviar a mensagem CONNECT, uma nova sessão persistente será criada. Se já existir uma sessão para o cliente, o cliente retomará a sessão existente. Para criar uma sessão limpa, você envia uma mensagem CONNECT e define o sinalizador cleanSession como 1, e o broker não armazenará nenhum estado da sessão quando o cliente se desconectar.

No MQTT 5, você lida com sessões persistentes definindo o sinalizador Clean Start e Session Expiry Interval. O Clean Start controla o início da sessão de conexão e o final da sessão anterior. Quando você define Clean Start =1, uma nova sessão é criada e uma sessão anterior é encerrada, se existir. Quando você define Clean Start =0, a sessão de conexão retoma uma sessão anterior, se ela existir. O intervalo de expiração da sessão controla o final da sessão de conexão. O intervalo de expiração da sessão especifica o tempo, em segundos (número inteiro de 4 bytes), em que uma sessão persistirá após a desconexão. Configuração Session Expiry interval = 0 faz com que a sessão seja encerrada imediatamente após a desconexão. Se o intervalo de expiração da sessão não for especificado na mensagem CONNECT, o padrão será 0.

Início limpo e expiração da sessão do MQTT 5
Valor da propriedade Descrição
Clean Start= 1 Cria uma sessão e encerra uma sessão anterior, se houver.
Clean Start= 0 Retoma uma sessão se existir uma sessão anterior.
Session Expiry Interval> 0 Persistir uma sessão.
Session Expiry interval= 0 Não persistir uma sessão.

No MQTT 5, se você define Clean Start = 1 e Session Expiry Interval =0, isso equivale a uma sessão limpa do MQTT 3. Se você define Clean Start = 0 e Session Expiry Interval> 0, isso equivale a uma sessão persistente do MQTT 3.

nota

Não há suporte para as sessões persistentes da versão MQTT cruzada (MQTT 3 e MQTT 5). Uma sessão persistente do MQTT 3 não pode ser retomada como uma sessão do MQTT 5 e vice-versa.

Operações durante uma sessão persistente

Os clientes usam o atributo sessionPresent na mensagem de conexão confirmada (CONNACK) para determinar se uma sessão persistente está presente. Se sessionPresent for 1, uma sessão persistente estará presente e todas as mensagens armazenadas para o cliente serão entregues ao cliente após o cliente receber a CONNACK, conforme descrito em Tráfego de mensagens após a reconexão com uma sessão persistente. Se sessionPresent for 1, o cliente não precisará se inscrever novamente. Porém, se sessionPresent for 0, nenhuma sessão persistente estará presente, e o cliente deverá se inscrever novamente nos filtros de tópico.

Depois que o cliente ingressa em uma sessão persistente, ele pode publicar mensagens e assinar filtros de tópico sem quaisquer sinalizadores adicionais em cada operação.

Tráfego de mensagens após a reconexão com uma sessão persistente

Uma sessão persistente representa uma conexão contínua entre um cliente e um agente de mensagens MQTT. Quando um cliente se conecta ao agente de mensagens usando uma sessão persistente, o agente de mensagens salva todas as inscrições que o cliente faz durante a conexão. Quando o cliente se desconecta, o agente de mensagens armazena mensagens de QoS não confirmadas e novas mensagens de QoS 1 publicadas em tópicos nos quais o cliente está inscrito. As mensagens são armazenadas conforme o limite da conta. As mensagens que excedem o limite serão descartadas. Para obter mais informações sobre os limites de mensagem persistente, consulte endpoints e cotas do AWS IoT Core. Quando o cliente se conecta novamente à sua sessão persistente, todas as inscrições são restabelecidas e todas as mensagens armazenadas são enviadas para o cliente com uma taxa máxima de 10 mensagens por segundo. No MQTT 5, se uma QoS1 de saída com o intervalo de expiração da mensagem expirar quando um cliente estiver offline, depois que a conexão for retomada, o cliente não receberá a mensagem expirada.

Após a reconexão, as mensagens armazenadas são enviadas ao cliente, a uma taxa limitada a 10 mensagens armazenadas por segundo, junto com qualquer tráfego de mensagens atual até que o limite Publish requests per second per connection seja atingido. Como a taxa de entrega das mensagens armazenadas é limitada, serão necessários vários segundos para entregar todas as mensagens armazenadas se uma sessão tiver mais de 10 mensagens armazenadas para entregar após a reconexão.

Encerrar uma sessão persistente

As sessões persistentes podem terminar das seguintes maneiras:

  • O tempo de expiração persistente da sessão expira. O cronômetro persistente de expiração da sessão começa quando o agente de mensagens detecta que um cliente se desconectou, seja pela desconexão do cliente ou pelo tempo limite da conexão.

  • O cliente envia uma mensagem CONNECT que define o sinalizador cleanSession como 1.

No MQTT 3, o valor padrão do tempo de expiração das sessões persistentes é de uma hora, e isso se aplica a todas as sessões na conta.

No MQTT 5, você pode definir o intervalo de expiração da sessão para cada sessão nos pacotes CONNECT e DISCONNECT.

Para o intervalo de expiração da sessão no pacote DISCONNECT:

  • Se a sessão atual tiver um intervalo de expiração de sessão de 0, você não poderá definir o intervalo de expiração da sessão como maior que 0 no pacote DISCONNECT.

  • Se a sessão atual tiver um intervalo de expiração de sessão maior que 0 e você definir o intervalo de expiração da sessão como 0 no pacote DISCONNECT, a sessão será encerrada em DISCONNECT.

  • Caso contrário, o intervalo de expiração da sessão no pacote DISCONNECT atualizará o intervalo de expiração da sessão atual.

nota

As mensagens armazenadas que aguardam para serem enviadas ao cliente quando a sessão termina são descartadas; porém, elas ainda são cobradas conforme a taxa de mensagens padrão, mesmo que não tenham sido enviadas. Para obter mais informações sobre os preços das mensagens, consulte Preços do AWS IoT Core. Você pode configurar o intervalo de tempo de expiração.

Reconexão após a expiração de uma sessão persistente

Se um cliente não se reconectar à sessão persistente antes que ela expire, a sessão terminará e as mensagens armazenadas serão descartadas. Quando um cliente se reconecta depois que a sessão expira com um sinalizador cleanSession para 0, o serviço cria uma nova sessão persistente. As assinaturas ou mensagens da sessão anterior não estão disponíveis para esta sessão porque foram descartadas quando a sessão anterior expirou.

Cobranças persistentes de mensagens de sessão

As mensagens são cobradas Conta da AWS quando o agente de mensagens envia uma mensagem para um cliente ou para uma sessão persistente offline. Quando um dispositivo offline com uma sessão persistente se reconecta e retoma a sessão, as mensagens armazenadas são entregues ao dispositivo e cobradas novamente em sua conta. Para obter mais informações sobre a definição de preço de mensagem, consulte Preços do AWS IoT Core – Mensagens.

O tempo de expiração padrão da sessão persistente de uma hora pode ser aumentado usando o processo padrão de aumento de limite. Observe que aumentar o tempo de expiração da sessão pode aumentar suas cobranças de mensagens, pois o tempo adicional pode permitir que mais mensagens sejam armazenadas no dispositivo off-line e essas mensagens adicionais seriam cobradas em sua conta conforme a taxa de mensagens padrão. O tempo de expiração da sessão é aproximado e uma sessão pode persistir por até 30 minutos a mais do que o limite da conta; porém, uma sessão não será menor que o limite da conta. Para obter mais informações sobre limites de sessão, consulte AWS Service Quotas.

Mensagens retidas do MQTT

AWS IoT Core suporta o sinalizador RETAIN descrito no protocolo MQTT. Quando um cliente define o sinalizador RETAIN em uma mensagem MQTT que ele publica, AWS IoT Core salva a mensagem. Em seguida, ele pode ser enviado para novos assinantes, recuperado chamando a operação GetRetainedMessage e visualizado no console do AWS IoT.

Exemplos de uso de mensagens retidas do MQTT
  • Como uma mensagem de configuração inicial

    As mensagens retidas do MQTT são enviadas a um cliente depois que o cliente se inscreve em um tópico. Se você quiser que todos os clientes que assinam um tópico recebam a mensagem retida do MQTT logo após a assinatura, você pode publicar uma mensagem de configuração com o sinalizador RETAIN definido. Os clientes assinantes também recebem atualizações dessa configuração sempre que uma nova mensagem de configuração é publicada.

  • Como uma última mensagem de estado conhecida

    Os dispositivos podem definir o sinalizador RETAIN nas mensagens do estado atual para que o AWS IoT Core as salve. Quando os aplicativos se conectam ou se reconectam, eles podem se inscrever nesse tópico e obter o último estado relatado logo após se inscreverem no tópico da mensagem retida. Dessa forma, eles podem evitar ter que esperar até a próxima mensagem do dispositivo para ver o estado atual.

Tarefas comuns com mensagens retidas pelo MQTT em AWS IoT Core

AWS IoT Core salva mensagens MQTT com o sinalizador RETAIN definido. Essas mensagens retidas são enviadas a todos os clientes que se inscreveram no tópico, como uma mensagem MQTT normal, e também são armazenadas para serem enviadas aos novos assinantes do tópico.

As mensagens retidas pelo MQTT exigem ações políticas específicas para autorizar os clientes a acessá-las. Para obter exemplos de uso de políticas de mensagens retidas, consulte Exemplos de políticas de mensagens retidas.

Esta seção descreve operações comuns que envolvem mensagens retidas.

  • Criar uma mensagem retida

    O cliente determina se uma mensagem é retida quando publica uma mensagem MQTT. Os clientes podem definir o sinalizador RETAIN ao publicar uma mensagem usando um SDK do Dispositivo. Aplicações e serviços podem definir o sinalizador RETAIN quando usam a ação Publish para publicar uma mensagem MQTT.

    Apenas uma mensagem por nome de tópico é retida. Uma nova mensagem com o sinalizador RETAIN definido publicada em um tópico substitui qualquer mensagem retida que tenha sido enviada ao tópico antes.

    NOTA: você não pode publicar em um tópico reservado com o sinalizador RETAIN definido.

  • Assinar um tópico de mensagem retida

    Os clientes assinam os tópicos de mensagens retidos como fariam com qualquer outro tópico de mensagem do MQTT. As mensagens retidas recebidas ao se inscrever em um tópico de mensagens retidas têm o sinalizador RETAIN definido.

    As mensagens retidas são excluídas AWS IoT Core quando um cliente publica uma mensagem retida com uma carga útil de mensagem de 0 bytes no tópico da mensagem retida. Os clientes que se inscreveram no tópico da mensagem retida também receberão a mensagem de 0 byte.

    Inscrever-se em um filtro de tópico curinga que inclui um tópico de mensagem retida permite que o cliente receba mensagens subsequentes publicadas no tópico da mensagem retida, mas não entrega a mensagem retida após a assinatura.

    NOTA: para receber uma mensagem retida após a assinatura, o filtro de tópicos na solicitação de assinatura deve corresponder exatamente ao tópico da mensagem retida.

    As mensagens retidas recebidas ao se inscrever em um tópico de mensagens retidas têm o sinalizador RETAIN definido. As mensagens retidas que são recebidas por um cliente assinante após a assinatura não têm.

  • Recuperar uma mensagem retida

    As mensagens retidas são entregues de modo automático aos clientes quando eles se inscrevem no tópico com a mensagem retida. Para que um cliente receba a mensagem retida após a assinatura, ele deve assinar o nome exato do tópico da mensagem retida. Inscrever-se em um filtro de tópico curinga que inclui um tópico de mensagem retida permite que o cliente receba mensagens subsequentes publicadas no tópico da mensagem retida, mas não entrega a mensagem retida após a assinatura.

    Serviços e aplicativos podem listar e recuperar mensagens retidas chamando ListRetainedMessages e GetRetainedMessage.

    Um cliente não é impedido de publicar mensagens em um tópico de mensagem retida sem definir o sinalizador RETAIN. Isso pode causar resultados inesperados, como a mensagem retida não corresponder à mensagem recebida ao se inscrever no tópico.

    Com o MQTT 5, se uma mensagem retida tiver o intervalo de expiração da mensagem definido e a mensagem retida expirar, um novo assinante que assine esse tópico não receberá a mensagem retida após a assinatura bem-sucedida.

  • Listando tópicos de mensagens retidas

    Você pode listar as mensagens retidas chamando ListRetainedMessages e as mensagens retidas podem ser visualizadas no console do AWS IoT.

  • Obter detalhes da mensagem retida

    Você pode obter detalhes das mensagens retidas chamando GetRetainedMessage e elas podem ser visualizadas no console do AWS IoT.

  • Reter de uma mensagem de Testamento

    As mensagens do MQTT de Testamento criadas quando um dispositivo se conecta podem ser retidas definindo o sinalizador Will Retain no campo Connect Flag bits.

  • Excluir uma mensagem retida

    Dispositivos, aplicativos e serviços podem excluir uma mensagem retida publicando uma mensagem com o sinalizador RETAIN definido e uma carga de mensagem vazia (0 byte) no nome do tópico da mensagem retida a ser excluída. Essas mensagens excluem a mensagem retida de AWS IoT Core, são enviadas aos clientes com uma assinatura do tópico, mas não são retidas por. AWS IoT Core

    As mensagens retidas também podem ser excluídas interativamente acessando a mensagem retida no console do AWS IoT. As mensagens retidas excluídas usando o console do AWS IoT também enviam uma mensagem de 0 byte aos clientes que se inscreveram no tópico da mensagem retida.

    As mensagens retidas não podem ser restauradas após serem excluídas. Um cliente precisaria publicar uma nova mensagem retida para substituir a mensagem excluída.

  • Depuração e solução de problemas de mensagens retidas

    O console do AWS IoT fornece várias ferramentas para ajudá-lo a solucionar problemas de mensagens retidas:

    • A página Mensagens retidas

      A página Mensagens retidas no console do AWS IoT fornece uma lista paginada das mensagens retidas armazenadas pela sua Conta na região atual. Nesta página, você pode:

      • Veja os detalhes de cada mensagem retida, como a carga útil da mensagem, o QoS e a hora em que ela foi recebida.

      • Atualize o conteúdo de uma mensagem retida.

      • Exclua uma mensagem retida.

    • O cliente de teste MQTT

      A página do cliente de teste do MQTT no console do AWS IoT pode se inscrever e publicar nos tópicos do MQTT. A opção de publicação permite que você defina o sinalizador RETAIN nas mensagens que você publica para simular como seus dispositivos podem se comportar.

    Alguns resultados inesperados podem ser o resultado desses aspectos de como as mensagens retidas são implementadas em AWS IoT Core.

    • Limites de mensagens retidas

      Quando uma conta armazena o número máximo de mensagens retidas, AWS IoT Core retorna uma resposta limitada às mensagens publicadas com RETAIN definido e cargas superiores a 0 bytes até que algumas mensagens retidas sejam excluídas e a contagem de mensagens retidas fique abaixo do limite.

    • Ordem de entrega de mensagens retidas

      A sequência da mensagem retida e da entrega da mensagem assinada não é garantida.

Faturamento e mensagens retidas

A publicação de mensagens com a bandeira RETAIN definida por um cliente, usando o console do AWS IoT ou chamando Publish gera cobranças adicionais de mensagens descritas em AWS IoT Core Preços – Mensagens.

A recuperação de mensagens retidas por um cliente, usando o AWS IoT console ou ligando GetRetainedMessagegera cobranças de mensagens, além das cobranças normais de uso da API. As cobranças adicionais estão descritas em AWS IoT Core Preços – Mensagens.

As mensagens de Testamento do MQTT publicadas quando um dispositivo se desconecta inesperadamente geram cobranças de mensagens descritas em AWS IoT Core Preços - Mensagens.

Para obter mais informações sobre custos de mensagens, consulte Preços do AWS IoT Core – Mensagens.

Comparar mensagens retidas do MQTT e sessões persistentes do MQTT

Mensagens retidas e sessões persistentes são recursos padrão do MQTT que possibilitam que os dispositivos recebam mensagens publicadas enquanto eles estavam off-line. As mensagens retidas podem ser publicadas de sessões persistentes. Esta seção descreve os principais aspectos desses recursos e como eles funcionam juntos.

Mensagens retidas

Sessões persistentes

Recursos principais

As mensagens retidas podem ser usadas para configurar ou notificar grandes grupos de dispositivos após a conexão.

As mensagens retidas também podem ser usadas quando você deseja que os dispositivos recebam apenas a última mensagem publicada em um tópico após uma reconexão.

As sessões persistentes são úteis para dispositivos que têm conectividade intermitente e podem perder várias mensagens importantes.

Os dispositivos podem se conectar a uma sessão persistente para receber mensagens enviadas enquanto estão off-line.

Exemplos

As mensagens retidas podem fornecer aos dispositivos informações de configuração sobre seu ambiente quando eles ficam on-line. A configuração inicial pode incluir uma lista de outros tópicos de mensagens nos quais ele deve se inscrever ou informações sobre como ele deve configurar seu fuso horário local.

Dispositivos que se conectam por uma rede celular com conectividade intermitente podem usar sessões persistentes para evitar a perda de mensagens importantes enviadas enquanto um dispositivo está fora da cobertura da rede ou precisa desligar o rádio do celular.

Mensagens recebidas na assinatura inicial de um tópico

Depois de assinar um tópico com uma mensagem retida, a mensagem retida mais recente é recebida.

Depois de assinar um tópico sem uma mensagem retida, nenhuma mensagem é recebida até que uma seja publicada no tópico.

Tópicos assinados após a reconexão

Sem uma sessão persistente, o cliente deve se inscrever nos tópicos após a reconexão.

Os tópicos inscritos são restaurados após a reconexão.

Mensagens recebidas após a reconexão

Depois de assinar um tópico com uma mensagem retida, a mensagem retida mais recente é recebida.

Todas as mensagens publicadas com uma QOS = 1 e assinadas com uma QOS =1 enquanto o dispositivo estava desconectado são enviadas após a reconexão do dispositivo.

Data/expiração da sessão

No MQTT 3, as mensagens retidas não expiram. Elas são armazenados até serem substituídas ou excluídas. No MQTT 5, as mensagens retidas expiram após o intervalo de expiração da mensagem que você definiu. Para obter mais informações, consulte Expiração da mensagem.

As sessões persistentes expiram se o cliente não se reconectar dentro do tempo limite. Depois que uma sessão persistente expira, as assinaturas e mensagens salvas do cliente publicadas com uma QOS = 1 e assinadas com uma QOS = 1 enquanto o dispositivo estava desconectado são excluídas. As mensagens expiradas não serão entregues. Para obter mais informações sobre expirações de sessões persistentes, consulte Sessões persistentes do MQTT.

Para obter mais informações sobre sessões persistentes, consulte Sessões persistentes do MQTT.

Com as mensagens retidas, o cliente de publicação determina se uma mensagem deve ser retida e entregue a um dispositivo após a conexão, independentemente de ter tido uma sessão anterior ou não. A escolha de armazenar uma mensagem é feita pelo publicador e a mensagem armazenada é entregue a todos os clientes atuais e futuros que assinam com assinaturas de QoS 0 ou QoS 1. As mensagens retidas mantêm apenas uma mensagem sobre um determinado tópico por vez.

Quando uma conta armazena o número máximo de mensagens retidas, AWS IoT Core retorna uma resposta limitada às mensagens publicadas com RETAIN definido e cargas superiores a 0 bytes até que algumas mensagens retidas sejam excluídas e a contagem de mensagens retidas fique abaixo do limite.

O MQTT reteve mensagens e AWS IoT sombras do dispositivo

Tanto as mensagens retidas quanto as sombras do dispositivo retêm dados de um dispositivo, mas se comportam de maneira diferente e servem a propósitos diferentes. Esta seção descreve suas semelhanças e diferenças.

Mensagens retidas

Sombras de dispositivos

A carga útil da mensagem tem uma estrutura ou esquema predefinido

Conforme definido pela implementação. O MQTT não especifica uma estrutura ou esquema para sua carga de mensagens.

AWS IoT suporta uma estrutura de dados específica.

A atualização da carga útil da mensagem gera mensagens de eventos

A publicação de uma mensagem retida envia a mensagem aos clientes inscritos, mas não gera mensagens de atualização adicionais.

A atualização de uma Sombra do dispositivo produz mensagens de atualização que descrevem a alteração.

As atualizações de mensagens são numeradas

As mensagens retidas não são numeradas automaticamente. Os documentos de Sombra do dispositivo têm números de versão e carimbos de data e hora automáticos.

A carga útil da mensagem é anexada a um recurso

As mensagens retidas não são anexadas a um recurso.

Sombras do dispositivo são anexadas a um recurso de objeto.

Atualização de elementos individuais da carga útil da mensagem

Elementos individuais da mensagem não podem ser alterados sem atualizar toda a carga útil da mensagem.

Elementos individuais de um documento de Sombra do dispositivo podem ser atualizados sem a necessidade de atualizar todo o documento de Sombra do dispositivo.

O cliente recebe dados da mensagem no momento da assinatura

O cliente recebe automaticamente uma mensagem retida depois de se inscrever em um tópico com uma mensagem retida.

Os clientes podem assinar as atualizações de Sombra do dispositivo, mas devem solicitar o estado atual deliberadamente.

Indexação e capacidade de pesquisa

As mensagens retidas não são indexadas para pesquisa.

A indexação de frotas indexa dados de Sombra do dispositivo para pesquisa e agregação.

Mensagens de Último testamento e Testamento (LWT, Last Will and Testament) do MQTT

Último testamento e Testamento (LWT, Last Will and Testament) é um atributo do MQTT. Com o LWT, os clientes podem especificar uma mensagem que o corretor publicará em um tópico definido pelo cliente e enviará a todos os clientes que se inscreveram no tópico quando ocorrer uma desconexão não iniciada. A mensagem que os clientes especificam é chamada de mensagem LWT ou Mensagem de testamento, e o tópico que os clientes definem é chamado de Tópico de testamento. Você pode especificar uma mensagem LWT quando um dispositivo se conecta ao agente. Essas mensagens podem ser retidas definindo o sinalizador Will Retain no campo Connect Flag bits durante a conexão. Por exemplo, se o sinalizador Will Retain estiver definido como 1, uma mensagem de testamento será armazenada no corretor no tópico de testamento associado. Para obter mais informações, consulte Mensagens de Will.

O corretor armazenará as mensagens de testamento até que ocorra uma desconexão não iniciada. Quando isso acontecer, o corretor publicará as mensagens para todos os clientes que se inscreveram no Tópico de testamento para notificar a desconexão. Se o cliente se desconectar do agente com uma desconexão iniciada pelo cliente usando a mensagem MQTT DISCONNECT, o broker não publicará as mensagens LWT armazenadas. Em todos os outros casos, as mensagens LWT serão enviadas. Para obter uma lista completa dos cenários de desconexão em que o agente enviará as mensagens LWT, confira Eventos de conexão/desconexão.

Uso do ConnectAttributes

O ConnectAttributes permite que você especifique quais atributos deseja usar na mensagem de conexão em suas políticas do IAM, como PersistentConnect e LastWill. Com o ConnectAttributes, você pode criar políticas que não dão aos dispositivos acesso a novos recursos por padrão, o que pode ser útil se um dispositivo for comprometido.

O connectAttributes oferece suporte aos seguintes recursos:

PersistentConnect

Use o atributo PersistentConnect para salvar todas as assinaturas que o cliente faz durante a conexão quando a conexão entre o cliente e o corretor é interrompida.

LastWill

Use o atributo LastWill para publicar uma mensagem no LastWillTopic quando um cliente se desconectar inesperadamente.

Por padrão, Sua política tem uma conexão não persistente e não há atributos passados para essa conexão. Você deve especificar uma conexão persistente em sua política do IAM se quiser ter uma.

Para exemplos de ConnectAttributes, consulte Exemplos da política de conexão.

Recursos compatíveis com o MQTT 5

AWS IoT Core o suporte para o MQTT 5 é baseado na especificação MQTT v5.0, com algumas diferenças, conforme documentado em. AWS IoT diferenças em relação às especificações do MQTT

Assinaturas compartilhadas

AWS IoT Core suporta assinaturas compartilhadas para MQTT 3 e MQTT 5. As assinaturas compartilhadas permitem que vários clientes compartilhem uma assinatura de um tópico e somente um cliente receberá mensagens publicadas nesse tópico usando uma distribuição randomizada. As assinaturas compartilhadas podem efetivamente balancear a carga das mensagens MQTT entre vários assinantes. Por exemplo, digamos que você tenha 1.000 dispositivos publicando no mesmo tópico e 10 aplicativos de back-end processando essas mensagens. Nesse caso, os aplicativos de back-end podem se inscrever no mesmo tópico e cada um receberá mensagens publicadas aleatoriamente pelos dispositivos no tópico compartilhado. Isso é efetivamente “compartilhar” a carga dessas mensagens. As assinaturas compartilhadas também permitem uma melhor resiliência. Quando qualquer aplicativo de back-end é desconectado, o agente distribui a carga para os assinantes restantes no grupo.

Para usar assinaturas compartilhadas, os clientes assinam um filtro de tópicos de uma assinatura compartilhada da seguinte maneira:

$share/{ShareName}/{TopicFilter}
  • $share é uma string literal para indicar o filtro de tópicos de uma Assinatura Compartilhada, que deve começar com $share.

  • {ShareName} é uma cadeia de caracteres para especificar o nome compartilhado usado por um grupo de assinantes. O filtro de tópicos de uma Assinatura Compartilhada deve conter um ShareName e ser seguido pelo caractere /. O {ShareName} não deve incluir os seguintes caracteres:/, + ou #. O tamanho máximo para {ShareName} é de 128 bytes.

  • O {TopicFilter} segue a mesma sintaxe de filtro de tópicos de uma assinatura não compartilhada. O tamanho máximo para {TopicFilter} é de 256 bytes.

  • As duas barras obrigatórias (/) para $share/{ShareName}/{TopicFilter} não estão incluídas no limite de Número máximo de barras no tópico e filtro de tópicos.

As assinaturas que têm o mesmo {ShareName}/{TopicFilter} pertencem ao mesmo grupo de assinaturas compartilhadas. Você pode criar vários grupos de assinaturas compartilhadas e não exceder o limite de assinaturas compartilhadas por grupo. Para obter mais informações, consulte Endpoints e cotas do AWS IoT Core na Referência geral da AWS .

As tabelas a seguir comparam assinaturas não compartilhadas e as assinaturas compartilhadas:

Assinatura Descrição Exemplos de filtro do tópico
Assinaturas não compartilhadas Cada cliente cria uma assinatura separada para receber as mensagens publicadas. Quando uma mensagem é publicada em um tópico, todos os assinantes desse tópico recebem uma cópia da mensagem.
sports/tennis sports/#
Assinaturas compartilhadas Vários clientes podem compartilhar uma assinatura de um tópico e somente um cliente receberá mensagens publicadas nesse tópico em uma distribuição aleatória.
$share/consumer/sports/tennis $share/consumer/sports/#
Fluxo de assinaturas não compartilhadas Fluxo de assinaturas compartilhadas
Assinaturas regulares para MQTT 3 e MQTT 5 in. AWS IoT Core
Assinaturas compartilhadas para MQTT 3 e MQTT 5 em. AWS IoT Core

Observações importantes sobre o uso de assinaturas compartilhadas

  • Quando uma tentativa de publicação para um assinante de QoS0 falha, nenhuma tentativa de nova tentativa acontecerá e a mensagem será descartada.

  • Quando uma tentativa de publicação para um assinante de QoS1 com sessão limpa falha, a mensagem é enviada para outro assinante no grupo para várias tentativas. As mensagens que não forem entregues após todas as tentativas serão descartadas.

  • Quando uma tentativa de publicação para um assinante de QoS1 com sessões persistentes falha porque o assinante está offline, as mensagens não serão colocadas na fila e serão enviadas para outro assinante do grupo. As mensagens que não forem entregues após todas as tentativas serão descartadas.

  • As assinaturas compartilhadas não recebem mensagens retidas.

  • Quando as assinaturas compartilhadas contêm caracteres curinga (# ou +), pode haver várias assinaturas compartilhadas correspondentes a um tópico. Se isso acontecer, o agente de mensagens copiará a mensagem de publicação e a enviará para um cliente aleatório em cada Assinatura compartilhada correspondente. O comportamento curinga das assinaturas compartilhadas pode ser explicado no diagrama a seguir.

    Assinaturas compartilhadas com caracteres curinga em. AWS IoT Core

    Neste exemplo, há três assinaturas compartilhadas correspondentes ao tópico de publicação do MQTT sports/tennis. O agente de mensagens copia a mensagem publicada e a envia para um cliente aleatório em cada grupo correspondente.

    O cliente 1 e o cliente 2 compartilham a assinatura: $share/consumer1/sports/tennis

    O cliente 3 e o cliente 4 compartilham a assinatura: $share/consumer1/sports/#

    O cliente 5 e o cliente 6 compartilham a assinatura: $share/consumer2/sports/tennis

Para obter mais informações sobre limites de Assinatura compartilhada, consulte Endpoints e cotas do AWS IoT Core na Referência geral da AWS . Para testar assinaturas compartilhadas usando o cliente AWS IoT MQTT no AWS IoT console, consulte. Testar assinaturas compartilhadas no cliente MQTT Para obter mais informações sobre assinaturas compartilhadas, confira Assinaturas compartilhadas da especificação MQTtv5.0.

Início limpo e expiração da sessão

Você pode usar o Clean Start e o Session Expiry para lidar com suas sessões persistentes com mais flexibilidade. Um sinalizador Clean Start indica se a sessão deve começar sem usar uma sessão existente. O intervalo de expiração da sessão indica por quanto tempo manter a sessão após uma desconexão. O intervalo de expiração da sessão pode ser modificado na desconexão. Para ter mais informações, consulte Sessões persistentes do MQTT.

Código de motivo em todos os ACKs

Você pode depurar ou processar mensagens de erro com mais facilidade usando os códigos de motivo. Os códigos de motivo são retornados pelo agente de mensagens com base no tipo de interação com o corretor (Assinar, Publicar, Confirmar). Para obter mais informações, consulte Códigos de motivo do MQTT. Para obter uma lista completa dos códigos de motivo do MQTT, consulte a especificação do MQTT v5.

Aliases de tópicos

Você pode substituir o nome de um tópico por um alias de tópico, que é um número inteiro de dois bytes. O uso de aliases de tópicos pode otimizar a transmissão de nomes de tópicos para reduzir potencialmente os custos de dados em serviços de dados medidos. AWS IoT Core tem um limite padrão de 8 aliases de tópicos. Para obter mais informações, consulte Endpoints e cotas do AWS IoT Core na Referência geral da AWS .

Expiração da mensagem

Você pode adicionar valores de expiração de mensagens às mensagens publicadas. Esses valores representam o intervalo de expiração da mensagem em segundos. Se as mensagens não tiverem sido enviadas aos assinantes dentro desse intervalo, a mensagem expirará e será removida. Se você não definir o valor de expiração da mensagem, ela não expirará.

Na saída, o assinante receberá uma mensagem com o tempo restante no intervalo de expiração. Por exemplo, se uma mensagem de publicação de entrada tiver uma expiração de 30 segundos e for encaminhada para o assinante após 20 segundos, o campo de expiração da mensagem será atualizado para 10. É possível que a mensagem recebida pelo assinante tenha um MEI atualizado de 0. Isso porque, assim que o tempo restante for de 999 ms ou menos, ele será atualizado para 0.

Em AWS IoT Core, o intervalo mínimo de expiração da mensagem é 1. Se o intervalo for definido como 0 do lado do cliente, ele será ajustado para 1. O intervalo máximo de expiração da mensagem é 604800 (7 dias). Qualquer valor maior que isso será ajustado para o valor máximo.

Na comunicação entre versões, o comportamento da expiração da mensagem é decidido pela versão MQTT da mensagem de publicação de entrada. Por exemplo, uma mensagem com expiração de mensagem enviada por uma sessão conectada via MQTT5 pode expirar para dispositivos inscritos com sessões MQTT3. A tabela abaixo mostra como a expiração de mensagens oferece suporte aos seguintes tipos de mensagens publicadas:

Publicar tipo de mensagem Intervalo de expiração da mensagem
Publicação regular Se um servidor não entregar a mensagem dentro do prazo especificado, a mensagem expirada será removida e o assinante não a receberá. Isso inclui situações como quando um dispositivo não está fazendo backup de suas mensagens do QoS 1.
Reter Se uma mensagem retida expirar e um novo cliente se inscrever no tópico, o cliente não receberá a mensagem após a assinatura.
Último testamento O intervalo para as mensagens de último testamento começa depois que o cliente se desconecta e o servidor tenta entregar a mensagem de último testamento aos assinantes.
Mensagens na fila Se uma QoS1 de saída com intervalo de expiração de mensagens expirar quando um cliente estiver off-line, após a retomada da sessão persistente, o cliente não receberá a mensagem expirada.

Outros recursos do MQTT 5

Desconexão do servidor

Quando ocorre uma desconexão, o servidor pode enviar proativamente ao cliente um DISCONNECT para notificar o encerramento da conexão com um código de motivo para a desconexão.

Resposta/solicitação

Os editores podem solicitar que uma resposta seja enviada pelo destinatário para um tópico especificado pelo publicador no momento do recebimento.

Tamanho máximo do pacote

O cliente e o servidor podem especificar de modo independente o tamanho máximo do pacote ao qual eles dão suporte.

Formato de carga útil e tipo de conteúdo

Você pode especificar o formato da carga útil (binário, texto) e o tipo de conteúdo quando uma mensagem é publicada. Eles são encaminhados para o destinatário da mensagem.

Propriedades do MQTT 5

As propriedades do MQTT 5 são adições importantes ao padrão MQTT para oferecer suporte aos novos recursos do MQTT 5, como a expiração da sessão e o padrão de solicitação/resposta. Em AWS IoT Core, você pode criar regras que podem encaminhar as propriedades em mensagens de saída ou usar HTTP Publish para publicar mensagens MQTT com algumas das novas propriedades.

A tabela a seguir lista todas as propriedades do MQTT 5 que AWS IoT Core suportam.

Propriedade Descrição Tipo de entrada Pacote
Indicador de formato da carga útil Um valor booliano que indica se a carga útil está formatada como UTF-8. Byte PUBLICAR, CONECTAR
Tipo de conteúdo Uma string UTF-8 que descreve o conteúdo da carga útil. String UTF-8 PUBLICAR, CONECTAR
Tópico de resposta Uma string UTF-8 que descreve o tópico que o destinatário deve publicar como parte do fluxo solicitação-resposta. O tópico não deve conter caracteres curinga. String UTF-8 PUBLICAR, CONECTAR
Dados de correlação Os dados binários usados pelo remetente da mensagem de solicitação para identificar para qual solicitação é a mensagem de resposta. Binário PUBLICAR, CONECTAR
Propriedades do usuário Um par de strings UTF-8. Essa propriedade pode aparecer várias vezes em um pacote. Os destinatários receberão os pares de chave-valor na mesma ordem em que são enviados. Par de strings UTF-8 CONECTAR, PUBLICAR, Propriedades, ASSINAR, DESCONECTAR, REMOVER ASSINATURA
Intervalo de expiração da mensagem Um inteiro de 4 bytes que representa o intervalo de expiração da mensagem em segundos. Se ausente, a mensagem não expira. inteiro de 4 bytes PUBLICAR, CONECTAR
Intervalo de expiração da sessão

Um número inteiro de 4 bytes que representa o intervalo de expiração da sessão em segundos. AWS IoT Core suporta no máximo 7 dias, com um máximo padrão de uma hora. Se o valor definido exceder o máximo da sua conta, AWS IoT Core retornará o valor ajustado no CONNACK.

inteiro de 4 bytes CONECTAR, CONNACK, DESCONECTAR
Identificador de cliente atribuído Um ID de cliente aleatório gerado AWS IoT Core quando um ID de cliente não é especificado pelos dispositivos. O ID aleatório do cliente deve ser um novo identificador de cliente que não seja usado por nenhuma outra sessão atualmente gerenciada pelo corretor. String UTF-8 CONNACK
Servidor Keep Alive Um número inteiro de 2 bytes que representa o tempo de manutenção de atividade atribuído pelo servidor. O servidor desconectará o cliente se o cliente ficar inativo por mais do que o tempo de manutenção de atividade. Inteiro de 2 bytes CONNACK
Solicitar informações sobre o problema Um valor booliano que indica se a cadeia de caracteres do motivo ou as propriedades do usuário são enviadas no caso de falhas. Byte CONECTAR
Máximo de recebimento Um inteiro de 2 bytes que representa o número máximo de pacotes PUBLICAR QOS > 0 que podem ser enviados sem receber um PUBACK. Inteiro de 2 bytes CONNECT, CONNACK
Tópico: máximo do alias Esse valor indica o valor mais alto que será aceito como um alias de tópico. O padrão é 0. Inteiro de 2 bytes CONNECT, CONNACK
QoS máximo O valor máximo de QoS que AWS IoT Core suporta. O padrão é 1. O AWS IoT Core não dá suporte a QoS2. Byte CONNACK
Reter disponível

Um valor booleano que indica se o agente de AWS IoT Core mensagens suporta mensagens retidas. O padrão é um.

Byte CONNACK
Tamanho máximo do pacote O tamanho máximo do pacote que AWS IoT Core aceita e envia. Não pode exceder 128 KB. inteiro de 4 bytes CONNECT, CONNACK
Assinatura de curinga disponível

Um valor booleano que indica se o agente de AWS IoT Core mensagens oferece suporte à assinatura Wildcard Available. O padrão é um.

Byte CONNACK
Identificador de assinatura disponível

Um valor booleano que indica se o agente de AWS IoT Core mensagens oferece suporte ao Identificador de Assinatura Disponível. O padrão é 0.

Byte CONNACK

Códigos de motivo do MQTT

O MQTT 5 introduz relatórios de erros aprimorados com respostas de código de motivo. AWS IoT Core pode retornar códigos de motivo, incluindo, mas não se limitando aos seguintes, agrupados por pacotes. Para obter uma lista completa dos códigos de motivo com suporte no MQTT 5, confira especificações do MQTT v5.

Códigos de motivo do CONNACK
Valor Hex Nome do código de motivo Descrição
0 0x00 Bem-sucedida A conexão é criptografada.
128 0x80 Erro não especificado O servidor não deseja revelar o motivo da falha, ou nenhum dos outros códigos de motivo se aplica.
133 0x85 O identificador de cliente não é válido O identificador do cliente é uma string válida, mas não é permitido pelo servidor.
134 0x86 Nome de usuário ou senha incorretos O servidor não aceita o nome de usuário ou a senha especificados pelo cliente.
135 0x87 Não autorizado O cliente não está autorizado a se conectar.
144 0x90 Nome do tópico inválido O nome do tópico do testamento está formado corretamente, mas não é aceito pelo servidor.
151 0x97 Cota excedida Um limite imposto administrativo ou de implementação foi excedido.
155 0x9B Não há suporte ao QoS O servidor não dá suporte a QoS definida na QoS do Testamento.
Códigos de motivo PUBACK
Valor Hex Nome do código de motivo Descrição
0 0x00 Bem-sucedida A mensagem foi aceita. A publicação da mensagem de QoS 1 continua.
128 0x80 Erro não especificado O destinatário não aceita a publicação, mas não quer revelar o motivo ou ele não corresponde a um dos outros valores.
135 0x87 Não autorizado A ação PUBLICAR não é autorizada.
144 0x90 Nome do tópico inválido O nome do tópico não está mal formado, mas não é aceito pelo cliente ou servidor.
145 0x91 Identificador de pacote em uso O identificador do pacote já está em uso. Isso pode indicar uma incompatibilidade no estado da sessão entre o cliente e o servidor.
151 0x97 Cota excedida Um limite imposto administrativo ou de implementação foi excedido.
Código do motivo da ação DESCONECTAR
Valor Hex Nome do código de motivo Descrição
129 0x81 Pacote malformado O pacote recebido não está em conformidade com essa especificação.
130 0x82 Erro de protocolo Um pacote inesperado ou fora de ordem foi recebido.
135 0x87 Não autorizado A solicitação não está autorizada.
139 0x8B Encerramento do servidor O servidor está sendo desligado.
141 0x8D Tempo limite do Keep Alive A conexão está fechada porque nenhum pacote foi recebido por 1,5 veze o tempo de Keep Alive.
142 0x8E Sessão retomada Outra conexão usando o mesmo ClientID foi conectada, fazendo com que essa conexão seja fechada.
143 0x8F Filtro de tópicos inválido O filtro de tópicos está formado corretamente, mas não é aceito pelo servidor.
144 0x90 Nome do tópico inválido O nome do tópico está formado corretamente, mas não é aceito por esse cliente ou servidor.
147 0x93 Máximo de recebimento excedido O cliente ou o servidor recebeu mais do que a publicação Máximo de recebimento para a qual não enviou PUBACK ou PUBCOMP.
148 0x94 Aliases do tópico inválido O cliente ou servidor recebeu um pacote PUBLICAR contendo um alias de tópico maior que o alias de tópico máximo enviado no pacote CONECTAR ou CONNACK.
151 0x97 Cota excedida Um limite imposto administrativo ou de implementação foi excedido.
152 0x98 Ação administrativa A conexão foi encerrada devido a uma ação administrativa.
155 0x9B Não há suporte ao QoS O cliente especificou uma QoS maior que a QoS especificada em uma QoS máxima no CONNACK.
161 0xA1 Identificadores de assinatura sem suporte O servidor não tem suporte para identificadores de assinatura; a assinatura não é aceita.
Códigos de motivo SUBACK
Valor Hex Nome do código de motivo Descrição
0 0x00 QoS concedida 0 A assinatura é aceita e a QoS máxima enviada será QoS 0. Pode ser uma QoS menor do que a solicitada.
1 0x01 QoS concedida 1 A assinatura é aceita e a QoS máxima enviada será QoS 1. Pode ser uma QoS menor do que a solicitada.
128 0x80 Erro não especificado A assinatura não é aceita e o Servidor não deseja revelar o motivo ou nenhum dos outros Códigos de Motivo se aplica.
135 0x87 Não autorizado O Cliente não está autorizado a fazer essa assinatura.
143 0x8F Filtro de tópicos inválido O Filtro de tópicos está formado corretamente, mas não é permitido para este Cliente.
145 0x91 Identificador de pacote em uso O identificador do pacote já está em uso.
151 0x97 Cota excedida Um limite imposto administrativo ou de implementação foi excedido.
Códigos de motivo UNSUBACK
Valor Hex Nome do código de motivo Descrição
0 0x00 Bem-sucedida A assinatura é excluída.
128 0x80 Erro não especificado Não foi possível concluir a assinatura e o Servidor não deseja revelar o motivo ou nenhum dos outros Códigos de Motivo se aplica.
143 0x8F Filtro de tópicos inválido O Filtro de tópicos está formado corretamente, mas não é permitido para este Cliente.
145 0x91 Identificador de pacote em uso O identificador do pacote já está em uso.

AWS IoT diferenças em relação às especificações do MQTT

A implementação do agente de mensagens é baseada na especificação MQTT v3.1.1 e na Especificação MQTT v5.0, mas difere das especificações das seguintes maneiras:

  • AWS IoT não suporta os seguintes pacotes para o MQTT 3: PUBREC, PUBREL e PUBCOMP.

  • AWS IoT não suporta os seguintes pacotes para o MQTT 5: PUBREC, PUBREL, PUBCOMP e AUTH.

  • AWS IoT não suporta o redirecionamento do servidor MQTT 5.

  • AWS IoT suporta somente os níveis 0 e 1 de qualidade de serviço (QoS) do MQTT. AWS IoT não suporta publicação ou assinatura com QoS nível 2. Quando o nível 2 da QoS é solicitado, o agente de mensagens do não envia um PUBACK ou SUBACK.

  • Em AWS IoT, assinar um tópico com QoS nível 0 significa que uma mensagem é entregue zero ou mais vezes. Uma mensagem pode ser entregue mais de uma vez. As mensagens entregues mais de uma vez podem ser enviadas com outro ID de pacote. Nesses casos, o sinalizador DUP não é definido.

  • Ao responder a uma solicitação de conexão, o agente de mensagens envia uma mensagem CONNACK. Essa mensagem contém um sinalizador para indicar se a conexão está retomando uma sessão anterior.

  • Antes de enviar pacotes de controle adicionais ou uma solicitação de desconexão, o cliente deve esperar que a mensagem CONNACK seja recebida em seu dispositivo pelo agente de mensagens AWS IoT .

  • Quando um cliente se inscreve em um tópico, pode haver uma demora entre o momento em que o operador envia uma mensagem SUBACK e o momento em que o cliente começa a receber novas mensagens correspondentes.

  • Quando um cliente usa o caractere curinga # no filtro de tópicos para assinar um tópico, há correspondência de todas as sequências de caracteres em e abaixo de seu nível na hierarquia de tópicos. Porém, o tópico principal não corresponde. Por exemplo, uma assinatura do tópico sensor/# recebe mensagens publicadas para os tópicos sensor/, sensor/temperature, sensor/temperature/room1, mas não as mensagens publicadas para sensor. Para obter mais informações sobre curingas, consulte Filtros de tópicos.

  • O agente de mensagens usa o ID do cliente para identificar cada cliente. O ID do cliente é transmitido do cliente para o agente de mensagens como parte da carga útil do MQTT. Dois clientes com o mesmo ID de cliente não podem ser conectados simultaneamente ao agente de mensagens. Quando um cliente se conecta ao agente de mensagens usando um ID que outro cliente está usando, a nova conexão do cliente é aceita e o cliente conectado anteriormente é desconectado.

  • Em raras ocasiões, o agente de mensagens pode reenviar a mesma mensagem lógica PUBLICAR com um ID de pacote diferente.

  • A assinatura de filtros de tópicos que contêm um caractere curinga não pode receber mensagens retidas. Para receber uma mensagem retida, a solicitação de assinatura deve conter um filtro de tópico que corresponda exatamente ao tópico da mensagem retida.

  • O agente de mensagens não garante a ordem em que as mensagens e o ACK são recebidos.

  • AWS IoT podem ter limites diferentes das especificações. Para obter mais informações, consulte agente de mensagens AWS IoT Core e limites e cotas do protocolo no Guia de referência do AWS IoT .

  • O sinalizador MQTT DUP não é suportado.