Espaços de tópicos no broker MQTT do Azure Event Grid

Um espaço temático representa múltiplos tópicos através de um conjunto de modelos de tópicos. Os modelos de tópicos alargam os filtros de tópicos MQTT com suporte a variáveis, para além dos carateres universais padrão do MQTT. Cada espaço temático representa os tópicos MQTT que o mesmo conjunto de clientes utiliza para comunicar.

Os espaços de tópicos simplificam o controlo de acesso ao permitir-lhe conceder, publicar ou subscrever acesso a um grupo de tópicos ao mesmo tempo, em vez de gerir o acesso para cada tema individual. O modelo de controlo de acesso combina quatro recursos para conceder a um grupo de clientes acesso para publicar ou subscrever um espaço temático:

  • Cliente: Representa um dispositivo ou aplicação que comunica via MQTT.
  • Grupo cliente: Agrupa os clientes que necessitam do mesmo acesso ao mesmo conjunto de tópicos MQTT.
  • Espaço de tópicos: Agrupa um ou mais modelos de tópicos que representam os tópicos pretendidos ou filtros de tópicos.
  • Vinculação de permissões: Concede a um grupo cliente acesso a publicar ou subscrever um espaço temático.

Para mais informações, consulte controlo de acesso para clientes MQTT.

Este artigo explica como os filtros de tópicos do MQTT, os modelos de tópicos e a configuração do espaço de tópicos funcionam em conjunto, para que possa agrupar tópicos relacionados e gerir o acesso dos clientes de forma eficiente.

Filtros de tópicos MQTT

Um filtro de tópico MQTT é um tópico MQTT que pode incluir curingas para um ou mais dos seus segmentos, de modo a corresponder a múltiplos tópicos MQTT. Os filtros de tópicos simplificam os pedidos de subscrição, porque um filtro de tópico pode corresponder a vários tópicos.

O broker MQTT suporta todos os caracteres universais do MQTT definidos pela especificação MQTT:

  • + corresponde a um único segmento. Por exemplo, o filtro machines/+/alert de tópicos corresponde a estes tópicos:
    • machines/temp/alert
    • machines/humidity/alert
  • # corresponde a zero ou mais segmentos no final do tópico. Por exemplo, o filtro machines/# de tópicos corresponde a estes tópicos:
    • machines
    • machines/temp
    • machines/humidity
    • machines/temp/alert

Para mais informações sobre carateres universais, consulte carateres universais de tópico na especificação MQTT.

Modelos de tópicos

Os modelos de tópicos estendem os filtros de tópicos MQTT com suporte para variáveis, além dos wildcards MQTT. A configuração do espaço de tópicos também proporciona controlo de acesso granular, permitindo que controle a autorização de cada cliente dentro de um grupo de clientes para publicar ou subscrever o seu próprio tema. Para mais informações, veja como os modelos de tópicos fornecem controlo de acesso granular.

Configuração do espaço tópico

Um espaço temático pode agrupar até 10 modelos de tópicos. Os modelos de tópicos suportam os curingas do MQTT (+ e #) e as seguintes variáveis:

  • ${client.authenticationName}: Representa o nome de autenticação do cliente. Para mais informações, consulte os termos-chave dos metadados do cliente.
  • ${client.attributes.x}: Representa um atributo atribuído a um cliente quando este é criado ou atualizado, onde x é a cadeia exata da chave de atributo. Por exemplo, se um cliente tiver o atributo area:section1, o modelo area/${client.attributes.area}/telemetry de tópico permite apenas que clientes com esse atributo publiquem sobre o tema area/section1/telemetryMQTT . Para mais informações, consulte clientes MQTT.

Observação

  • Os tópicos que começam $ são reservados para uso interno.
  • Uma variável pode representar uma parte de um segmento ou um segmento inteiro, mas não pode cobrir mais do que um segmento. Por exemplo, o modelo machines/${client.authenticationName|.factory1}/temp de tópico corresponde a tópicos como machines/machine1.factory1/temp e machines/machine2.factory1/temp.
  • Os modelos de tópicos usam os caracteres especiais $ e |, que poderá ser necessário escapar, consoante a shell que utilizar. Por exemplo, no PowerShell, escape estes caracteres conforme ilustrado nos exemplos seguintes:
    • "vehicles/${client.authenticationName|dollar}/#"
    • vehicles/${client.authenticationName"|"dollar}/#

Para criar um espaço de tópicos no portal do Azure ou com a CLI do Azure, consulte Publicar e subscrever mensagens MQTT. Quando nomear um espaço temático, use estas regras:

  • O nome de um espaço de tópico pode ter entre 3 a 50 caracteres.
  • O nome de um espaço de tópico pode incluir caracteres alfanuméricos e hífens (-), sem espaços.

Captura de ecrã da configuração do espaço de tópicos no portal Azure.

O seguinte exemplo de CLI do Azure cria um espaço temático que tem dois modelos de tópicos:

az eventgrid namespace topic-space create -g myRG --namespace-name myNS -n myTopicSpace --topic-templates ['segment1/+/segment3/${client.authenticationName}', "segment1/${client.attributes.attribute1}/segment3/#"]

Observação

As atualizações de configuração em espaço de tópicos podem demorar alguns minutos a propagar-se.