MQTT
O MQTT
O AWS IoT Core dá suporte a conexões de dispositivos que usam o protocolo MQTT sobre WSS e que são identificadas por uma ID de cliente. O SDKs de dispositivo da AWS IoT dá suporte a ambos os protocolos e são as formas recomendadas de conectar dispositivos a AWS IoT Core. Os SDKs do Dispositivo AWS IoT dão suporte às funções necessárias para dispositivos e clientes se conectarem e acessarem os serviços AWS IoT. Os Device SDKs oferecem suporte aos protocolos de autenticação exigidos pelos serviços AWS IoT e aos requisitos de ID de conexão exigidos pelos protocolos MQTT e MQTT sobre WSS. Para obter informações sobre como se conectar ao AWS IoT usando os SDKs do Dispositivo AWS e links para exemplos de AWS IoT nos idiomas com suporte, confira Conectar-se ao MQTT usando os SDKs do Dispositivo AWS IoT. 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 SDKs do Dispositivo AWS IoT para se conectar ao AWS IoT, eles não são obrigatórios. Porém, se você não usar os SDKs do Dispositivo AWS IoT, 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)
Neste tópico:
- Conectar-se ao MQTT usando os SDKs do Dispositivo AWS IoT
- Opções de Qualidade de serviço (QoS) do MQTT
- Sessões persistentes do MQTT
- Mensagens retidas do MQTT
- Mensagens de Último testamento e Testamento (LWT, Last Will and Testament) do MQTT
- Uso do ConnectAttributes
- Recursos compatíveis com o MQTT 5
- Propriedades do MQTT 5
- Códigos de motivo do MQTT
- Diferenças de AWS IoT das especificações do MQTT
Conectar-se ao MQTT usando os SDKs do Dispositivo AWS IoT
Esta seção contém links para os SDKs do Dispositivo AWS IoT 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 ao AWS IoT usando o protocolo MQTT e o MQTT pelo WSS.
nota
Os SDKs do Dispositivo AWS IoT lançaram um cliente MQTT 5.
Opções de Qualidade de serviço (QoS) do MQTT
AWS IoT e os SDKs de Dispositivo AWS IoT dão suporte aos níveis de Qualidade de Serviço (QoS) do MQTT 0
e 1
2
, mas AWS IoT não dá suporte a ele. 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 |
A mensagem não é considerada completa até que o remetente receba uma resposta |
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 no CloudWatch e no CloudWatch Logs. Para informações sobre as entradas gravadas no CloudWatch e no CloudWatch Logs, consulte Métricas do agente de mensagens e Entrada de log em fila.
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.
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 sinalizadorcleanSession
como1
.
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
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 de seu Conta da AWS quando o agente de mensagens envia uma mensagem para um cliente ou para uma sessão persistente off-line. 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 dá suporte ao sinalizador RETAIN descrito no protocolo MQTT. Quando um cliente define o sinalizador RETAIN em uma mensagem MQTT que ele publica, o 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, publique 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.
Nesta seção:
Tarefas comuns com mensagens retidas pelo MQTT em AWS IoT Core
O 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 do AWS IoT Core quando um cliente publica uma mensagem retida com uma carga útil de mensagem de 0 byte 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
eGetRetainedMessage
.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 campoConnect 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 no 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 CorePreços – Mensagens
A recuperação de mensagens retidas por um cliente, usando o console do AWS IoT ou chamando GetRetainedMessage
gera cobranças de mensagens, além das cobranças normais de uso da API. As cobranças adicionais estão descritas em AWS IoT CorePreços – Mensagens
As mensagens de Testamento
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 sombras do dispositivo AWS IoT
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. |
O AWS IoT dá suporte a 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 noLastWillTopic
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
O suporte do AWS IoT Core para o MQTT 5 é baseado na especificação MQTT v5.0
O AWS IoT Core oferece suporte aos seguintes recursos do MQTT 5:
Assinaturas compartilhadas
O AWS IoT Core é compatível com 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 umShareName
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. |
|
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. |
|
Fluxo de assinaturas não compartilhadas | Fluxo de assinaturas compartilhadas |
---|---|
|
|
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.
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 MQTT AWS IoT no console do AWS IoT
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 obter 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.
No 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. No 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 compatíveis com AWS IoT Core.
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. O AWS IoT Core dá suporte a até sete dias, com um máximo padrão de uma hora. Se o valor definido exceder o máximo da sua conta, o 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 pelo 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 compatível com o AWS IoT Core. O padrão é 1. O AWS IoT Core não dá suporte a QoS2. | Byte | CONNACK |
Reter disponível |
Um valor booliano que indica se o agente de mensagens AWS IoT Core dá suporte mensagens retidas. O padrão é um. |
Byte | CONNACK |
Tamanho máximo do pacote | O tamanho máximo do pacote que o 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 booliano que indica se o agente de mensagens AWS IoT Core oferece suporte à assinatura Curinga disponível. O padrão é um. |
Byte | CONNACK |
Identificador de assinatura disponível |
Um valor booliano que indica se o agente de mensagens AWS IoT Core oferece suporte para Identificador de assinatura disponível. O padrão é 0. |
Byte | CONNACK |
Códigos de motivo do MQTT
O MQTT 5 introduz relatório de erros aprimorado com respostas de código de motivo. O AWS IoT Core pode retornar códigos de motivo, incluindo, entre outros, os 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
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. |
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. |
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. |
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. |
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. |
Diferenças de AWS IoT das especificações do MQTT
A implementação do agente de mensagens é baseada na especificação MQTT v3.1.1
-
AWS IoT não tem suporte para os seguintes pacotes para o MQTT 3: PUBREC, PUBREL e PUBCOMP.
-
AWS IoT não tem suporte para os seguintes pacotes para o MQTT 5: PUBREC, PUBREL e PUBCOMP e AUTH.
-
AWS IoT não tem suporte para o redirecionamento do servidor MQTT 5.
-
O AWS IoT oferece suporte apenas aos níveis 0 e 1 da Qualidade de serviço (QoS) do MQTT. O AWS IoT não oferece suporte à publicação ou à assinatura com nível 2 da QoS. Quando o nível 2 da QoS é solicitado, o agente de mensagens do não envia um PUBACK ou SUBACK.
-
No AWS IoT, a assinatura de um tópico com nível 0 da QoS representa 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ópicosensor/#
recebe mensagens publicadas para os tópicossensor/
,sensor/temperature
,sensor/temperature/room1
, mas não as mensagens publicadas parasensor
. 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.
-
Não há suporte para o sinalizador MQTT DUP.