Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O recurso Message Queuing Telemetry Transport (MQTT) Retain no Azure Event Grid garante que o último valor válido conhecido de um tópico seja armazenado de forma a estar prontamente disponível para novos assinantes. Esse recurso permite que novos clientes recebam instantaneamente a mensagem mais recente após a conexão, eliminando a necessidade de esperar pela próxima publicação. É benéfico em cenários como relatórios de estado do dispositivo, sinais de controle ou dados de configuração, onde o acesso oportuno à mensagem mais recente é fundamental.
Este artigo fornece uma visão geral de como o MQTT Retain funciona, suas implicações de faturamento, limites de armazenamento, métodos de exclusão de mensagens e considerações de gerenciamento de retenção.
Faturação
Uma publicação retida é contada como duas operações MQTT: uma para processar a mensagem e outra para a armazenar.
Limites de armazenamento
- Até 640 MB ou 10.000 mensagens retidas por unidade de taxa de transferência (TU).
- O tamanho máximo por mensagem retida é de 64 KB.
Para necessidades maiores, contacte o Suporte do Azure.
Eliminação de mensagens
- MQTT 3.1.1: Publique uma carga vazia no tópico. Para definir a expiração, contacte o suporte do Azure.
- MQTT 5.0: Defina a expiração ou envie uma mensagem vazia para removê-la.
Mensagens retidas – Obter e Listar
As mensagens retidas permitem que um corretor MQTT armazene a última mensagem conhecida num tema, para que os novos subscritores recebam imediatamente o valor atual sem esperar pela próxima publicação. Agora pode usar os seguintes endpoints de gestão HTTP:
- Retain Get: recupera o corpo bruto da mensagem retida para um tópico específico. Os metadados da mensagem são devolvidos através de cabeçalhos HTTP.
- Retain List: enumera mensagens retidas que correspondem a um filtro de tópico (curingas suportadas) ou a página através de resultados com um token de continuação.
Use estas APIs para observabilidade, auditoria e fluxos de trabalho operacionais (como, por exemplo, para suportar a resolução de problemas, backfills ou verificação do estado do dispositivo em escala).
Autenticação e autorização
As APIs de Retenção, Obtenção e Lista de Retenção exigem:
-
Auth:
Authorization: Bearer <token>. -
Audiência ou âmbito do token: Utilize o ID da App, o URI ou recurso fornecido pelo corretor para esta pré-visualização (substitua
<YOUR TOKEN HERE>em exemplos). - RBAC: O chamador deve ter permissão para invocar operações de leitura de mensagens retidas no namespace.
Para obter o token Bearer, execute o seguinte comando Azure CLI:
az account get-access-token --resource=https://eventgrid.azure.net --query accessToken -o tsv
API de referência
Reter Obter
GET /mqtt/retainedMessages/message?topic=<YOUR ENCODED TOPIC HERE>&api-version=2025-11-16-preview HTTP/1.1
Authorization: Bearer YOURENTRATOKEN
Host: <YOUR Event Grid MQTT BROKER URL HERE>
Resposta:
- Corpo: carga útil bruta de mensagens MQTT (bytes).
-
Cabeçalhos: incluem metadados da mensagem (nomes sujeitos a alterações na visualização prévia):
-
x-ms-mqtt-topic: tema da mensagem retida. -
x-ms-mqtt-qos: Nível de QoS (0 ou 1). -
x-ms-mqtt-size: tamanho completo da mensagem MQTT (bytes). -
x-ms-mqtt-expiry: carimbo temporal de expiração (ISO 8601) caso esteja definido. -
x-ms-mqtt-last-modified: marca temporal modificada mais recente (ISO 8601).
-
Lista de Retenção
GET /mqtt/retainedMessages?topicFilter=<YOUR ENCODED TOPIC FILTER HERE>&continuationToken=<MUTUALLY EXCLUSIVE WITH TOPIC FILTER>&maxResults=<1-100>&api-version=2025-11-16-preview HTTP/1.1
Authorization: Bearer YOURENTRATOKEN
Host: <YOUR Event Grid MQTT BROKER URL HERE>
-
topicFiltersuporta curingas (por exemplo,factory/+/state, sensors/#). -
continuationTokené mutuamente exclusivo em relação a topicFilter. Use-o para continuar a partir de uma página anterior. -
maxResultslimita o tamanho da página (1–100).
Resposta (JSON):
{
"nextLink": "<NULL OR URL HERE>",
"retainedMessages": [
{
"topic": "<SOME TOPIC>",
"qos": "<SOME QOS>",
"size": "<FULL MQTT MESSAGE SIZE>",
"expiry": "<TIME STAMP>",
"lastModifiedTime": "<TIME STAMP>"
}
]
}
Examples
Exemplo de codificação de URL
- Tópico:
factory/line1/cell17/state- Codificado:
factory%2Fline1%2Fcell17%2Fstate
- Codificado:
- Filtro:
factory/line1/+/state- Codificado:
factory%2Fline1%2F%2B%2Fstate
- Codificado:
Retain Get - exemplo de curl
BROKER="<YOUR BROKER URL HERE>" # e.g. contoso.westus.ts.eventgrid.azure.net
ENTRATOKEN="<YOUR TOKEN HERE>"
TOPIC_ENC="factory%2Fline1%2Fcell17%2Fstate"
curl -i \
-H "Authorization: Bearer $ENTRATOKEN" \
"https://$BROKER/mqtt/retainedMessages/message?topic=$TOPIC_ENC&api-version=2025-11-16-preview"
Exemplo de resposta:
HTTP/1.1 200 OK
x-ms-mqtt-topic: factory/line1/cell17/state
x-ms-mqtt-qos: 1
x-ms-mqtt-size: 42
x-ms-mqtt-expiry: 2025-11-16T08:13:05Z
x-ms-mqtt-last-modified: 2025-11-16T07:59:41Z
content-type: application/octet-stream
{"state":"READY","tempC":25.1,"ts":"2025-11-16T07:59:40Z"}
Retain List com filtro de tópicos - exemplo de uso do curl
BROKER="<YOUR BROKER URL HERE>"
ENTRATOKEN="<YOUR TOKEN HERE>"
FILTER_ENC="factory%2Fline1%2F%2B%2Fstate"
curl -sS \
-H "Authorization: Bearer $ENTRATOKEN" \
"https://$BROKER/mqtt/retainedMessages?topicFilter=$FILTER_ENC&maxResults=50&api-version=2025-11-16-preview"
Exemplo de resposta:
{
"nextLink": null,
"retainedMessages": [
{
"topic": "factory/line1/cell17/state",
"qos": 1,
"size": 42,
"expiry": "2025-11-16T08:13:05Z",
"lastModifiedTime": "2025-11-16T07:59:41Z"
},
{
"topic": "factory/line1/cell18/state",
"qos": 1,
"size": 41,
"expiry": null,
"lastModifiedTime": "2025-11-16T07:55:02Z"
}
]
}
Lista de Retenção com continuationToken - exemplo de curl
NEXT_LINK="<PASTE NEXTLINK FROM PRIOR CALL>"
curl -sS -H "Authorization: Bearer $ENTRATOKEN" "$NEXT_LINK"
Comportamento, limites e desempenho
- intervalo de maxResults: 1–100 por página.
-
Filtro de tópico: suporta curingas
+MQTT padrão e#(codificado em URL). - Tamanho da carga útil: devolvido como bytes brutos (sem envolvimento JSON).
- Cabeçalhos: fonte única para metadados no Get; Não esperes um envelope JSON.
- Paginação: siga nextLink até null. Não misture o topicFilter com o continuationToken.
- Limitação: podem aplicar-se as limitações padrão da plataforma (429). Usa retry com backoff.
Tratamento de erros e solução de problemas
- 400 Pedido Mal Formado: tópico malformado ou em falta; forneceu tanto topicFilter como continuationToken.
- 401 Não autorizado: token inválido ou expirado ou destinatário incorreto.
- 403 Proibido: o chamador não tem permissão no namespace.
- 404 Não Encontrado: não há mensagem retida para o tópico especificado.
- 409 Conflito: pedido viola restrições de pré-visualização.
- 429 pedidos a mais: limitado; Respeita Retry-After.
- 5xx: erro de serviço transitório; Tenta novamente com recuo exponencial.
Observação
- Confirme que o tema está exato (com distinção de maiúsculas e minúsculas) e corretamente codificado por URL.
- Verifique se está a solicitar a audiência ou o âmbito correto para o corretor.