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á.
Mensagens diretas
AWS IoT Core agora oferece suporte a mensagens diretas. Você pode enviar uma mensagem para um único dispositivo conectado pelo ID do cliente MQTT, sem exigir que o dispositivo se inscreva em um tópico.
Anteriormente, enviar uma mensagem para um dispositivo específico exigia a publicação em um tópico no qual o dispositivo estava inscrito, sem uma forma integrada de confirmar a entrega. O remetente chama a API SendDirectMessage HTTP, especificando a ID do cliente do destinatário e um tópico de destino. Quandoconfirmation=true, AWS IoT Core entrega em QoS 1 e aguarda o PUBACK do receptor antes de retornar uma resposta bem-sucedida. Isso lhe dá uma confirmação de entrega de ponta a ponta. A resposta da API e o Amazon CloudWatch Logs fornecem visibilidade total do status da entrega e dos motivos da falha.
As mensagens diretas não são processadas pelas AWS IoT Regras para execução de regras, não são colocadas em fila para dispositivos off-line e não oferecem suporte a mensagens retidas.
Pré-requisitos
Tanto o remetente quanto o destinatário exigem ações políticas específicas para usar mensagens diretas. O remetente deve ter iot:SendDirectMessage permissão. O ID do cliente de destino é especificado como o recurso e a chave de iot:Topic condição (opcional) restringe quais tópicos um remetente pode enviar mensagens diretas. O destinatário deve ter iot:Receive permissão sobre o tópico de destino. O destinatário não precisa de iot:Subscribe permissão — AWS IoT Core entrega mensagens diretas sem exigir uma assinatura de tópico. Para obter mais detalhes e exemplos de políticas, consulteExemplos de políticas de mensagens diretas.
Para os mapeamentos de porta e autenticação usados por solicitações HTTP, consulte Protocolos, mapeamentos de porta e autenticação.
SendDirectMessage API
Os remetentes podem enviar mensagens diretas fazendo solicitações HTTP POST para um URL específico do cliente:
https://IoT_data_endpoint/connections/client_id/messages?topic=topic_name&confirmation=true&timeout=10
-
IoT_data_endpointé o endpoint de dados do AWS IoT dispositivo. Consulte AWS IoT dados do dispositivo e endpoints de serviço para encontrar seu endpoint. -
client_idé o identificador exclusivo do cliente MQTT para o qual enviar a mensagem. Os IDs do cliente não devem exceder 128 caracteres e não podem começar com um cifrão ($). Os IDs de cliente MQTT devem ser codificados por URL (codificados por porcentagem) quando contêm caracteres que não são válidos em solicitações HTTP, como espaços, barras (/) e caracteres. UTF-8 Para obter mais informações, consulte Limites e cotas do agente de AWS IoT Core mensagens e do protocolo. -
topic_nameé o tópico sobre o qual o receptor recebe a mensagem, URL-encoded. Não deve começar com $. Não deve ser um tópico AWS IoT Core reservado. Consulte a página de cotas AWS IoT Core de serviço para ver os limites de extensão e profundidade do tópico. Para obter mais informações, consulte Limites e cotas do agente de AWS IoT Core mensagens e do protocolo. -
confirmationé um booleano. Quando definida comotrue, a API entrega a mensagem em QoS 1 e espera que o cliente MQTT envie uma confirmação de entrega (PUBACK) antes de retornar uma resposta bem-sucedida. Se a confirmação de entrega não for recebida dentro do período de tempo limite especificado, a API retornará HTTP 504. -
timeouté um número inteiro que representa o tempo máximo, em segundos, para esperar por uma confirmação de entrega (PUBACK) do cliente receptor após a entrega da mensagem. Esse parâmetro só é usado quandoconfirmationestá definido comotrue. Seconfirmationfor esse o casofalse, esse parâmetro será ignorado. O tempo total de resposta da API pode ser maior do que esse valor devido ao processamento interno. Defina o tempo limite do seu cliente HTTP para um valor maior que esse parâmetro.
Códigos de status de resposta da API
A tabela a seguir lista os códigos de status HTTP retornados pela SendDirectMessage API e as ações recomendadas para cada um. Ative AWS IoT Core CloudWatch os registros para ver registros de SendDirectMessage eventos detalhados, incluindo o campo de motivo para tratamento de erros programáticos.
| Código HTTP | Ação recomendada |
|---|---|
| 200 OK | Se a confirmação de entrega foi solicitada comconfirmation=true, isso indica que o destinatário confirmou o recebimento da mensagem. Caso contrário, isso indica que a mensagem foi enviada com sucesso. |
| 400 solicitação inválida | Isso significa que um dos parâmetros é inválido. Revise a mensagem ou CloudWatch os registros de resposta HTTP para identificar falhas e correções específicas. Certifique-se de que os nomes dos tópicos Client-id sejam válidos e URL-encoded corretos. |
| 403 proibido | Isso significa que a política do remetente não concede iot:SendDirectMessage sobre o cliente e o tópico alvo, ou que a política do destinatário não concede iot:Receive sobre o tópico. Revise a mensagem ou CloudWatch os registros de resposta HTTP para identificar falhas específicas e atualize a política correspondente. Consulte Exemplos de políticas de mensagens diretas. |
| 404 Not Found (404 Não encontrado) | Isso significa que o ID do cliente de destino não está conectado AWS IoT Core a. Examine a mensagem ou CloudWatch os registros de resposta HTTP para saber o motivo específico, verifique se o receptor está conectado e tente novamente. Se a mensagem de resposta indicar “O ID do cliente de destino não está conectado, mas tem uma sessão persistente ativa”, o cliente de destino tem uma sessão persistente não expirada, mas está offline no momento. |
| 413 Carga útil muito grande | A carga útil excede o tamanho máximo permitido. Reduza o tamanho da carga e tente novamente. Cotas de serviço do AWS IoT Core |
| 429, muitas solicitações | Isso significa que a conta excedeu o limite de SendDirectMessage solicitações por segundo ou a conexão do receptor excedeu o limite de publicação externa. Analise a mensagem ou CloudWatch os registros de resposta HTTP pelo motivo específico, reduza a taxa de solicitação e implemente o retrocesso exponencial. Cotas de serviço do AWS IoT Core |
| 500 Internal Server Error | Isso indica um erro inesperado do lado do servidor. Tente novamente a solicitação com recuo exponencial. Se o problema persistir, entre em contato com o AWS Suporte com o TraceID da resposta. |
| Tempo limite do gateway 504 | Isso significa que o receptor não enviou PUBACK dentro do período de tempo limite especificado. Aumente o valor do tempo limite, verifique se o cliente MQTT do receptor envia mensagens PUBACK para QoS 1 ou verifique se o receptor está processando mensagens lentamente. |
Exemplos
Comportamento do cliente receptor
O Direct Messaging entrega mensagens aos clientes MQTT (receptores) sem exigir uma assinatura de tópico. Para se beneficiar totalmente das mensagens diretas, o destinatário deve apoiar os seguintes comportamentos:
-
Receber mensagens sobre tópicos não explicitamente inscritos — As mensagens diretas do destinatário podem enviar mensagens para tópicos nos quais o destinatário não se inscreveu explicitamente. No entanto, algumas implementações do cliente MQTT filtram ou descartam mensagens em tópicos não assinados. Se seu cliente descartar essas mensagens, as mensagens diretas só funcionarão em tópicos nos quais o destinatário também se inscreveu. Para receber mensagens diretas sobre qualquer assunto, verifique se o gerenciador de mensagens do seu cliente processa as mensagens independentemente do estado da assinatura.
-
Gerencie a QoS determinada pela API — O nível de QoS da mensagem entregue é definido pelo
confirmationparâmetro na solicitação de API do remetente, não pela assinatura do destinatário. Quandoconfirmation=true, a mensagem chega à QoS 1 e o cliente do receptor deve enviar um PUBACK para confirmar a entrega. Quandoconfirmation=false, a mensagem chega à QoS 0 sem necessidade de confirmação. Certifique-se de que a implementação do MQTT do seu cliente processe corretamente as mensagens recebidas de QoS 0 e QoS 1.