Onderwerpruimten in de Azure Event Grid MQTT broker

Een themaruimte vertegenwoordigt meerdere onderwerpen via een set onderwerptemplates. Onderwerptemplates breiden MQTT-topicfilters uit met ondersteuning voor variabelen, naast de standaard MQTT-wildcards. Elke themaruimte vertegenwoordigt de MQTT-onderwerpen die dezelfde groep cliënten gebruikt om te communiceren.

Onderwerpruimten vereenvoudigen toegangsbeheer doordat je in één keer publicatie- of abonnementstoegang kunt verlenen voor een groep onderwerpen, in plaats van de toegang voor elk afzonderlijk onderwerp te beheren. Het toegangscontrolemodel combineert vier middelen om een clientgroep toegang te geven om een topic space te publiceren of te abonneren:

  • Client: Vertegenwoordigt een apparaat of applicatie die communiceert via MQTT.
  • Clientgroep: Groepeert de clients die dezelfde toegang tot dezelfde set MQTT-onderwerpen nodig hebben.
  • Onderwerpruimte: Groepeer één of meer onderwerptemplates die de bedoelde onderwerpen of onderwerpfilters vertegenwoordigen.
  • Machtigingskoppeling: Verleent een clientgroep publicatie- of abonnementsrechten voor een topicruimte.

Voor meer informatie, zie Access control for MQTT-clients.

Dit artikel legt uit hoe MQTT-topicfilters, topictemplates en topic space-configuratie samenwerken, zodat je gerelateerde onderwerpen kunt groeperen en klanttoegang efficiënt kunt beheren.

MQTT-onderwerpfilters

Een MQTT-onderwerpfilter is een MQTT-onderwerp dat jokers kan bevatten voor een of meer van zijn segmenten, zodat het overeenkomt met meerdere MQTT-onderwerpen. Onderwerpfilters vereenvoudigen abonnementsverzoeken, omdat één onderwerpfilter meerdere onderwerpen kan matchen.

De MQTT-broker ondersteunt alle MQTT-wildcards die zijn gedefinieerd door de MQTT-specificatie:

  • + komt overeen met één segment. Bijvoorbeeld, de topicfilter machines/+/alert komt overeen met deze onderwerpen:
    • machines/temp/alert
    • machines/humidity/alert
  • # komt overeen met nul of meer segmenten aan het einde van de topic. Bijvoorbeeld, de topicfilter machines/# komt overeen met deze onderwerpen:
    • machines
    • machines/temp
    • machines/humidity
    • machines/temp/alert

Voor meer informatie over jokers, zie Topic wildcards in de MQTT-specificatie.

Onderwerpsjablonen

Onderwerpsjablonen breiden MQTT-onderwerpfilters uit met ondersteuning voor variabelen, naast de MQTT-wildcards. Configuratie van de onderwerpruimte biedt ook gedetailleerde toegangscontrole door je toe te staan de autorisatie van elke client binnen een clientgroep te bepalen om een eigen onderwerp te publiceren of te abonneren. Voor meer informatie, zie hoe onderwerptemplates gedetailleerde toegangscontrole bieden.

Configuratie van de themaruimte

Een topic space kan tot 10 topic templates groeperen. Onderwerptemplates ondersteunen de MQTT wildcards (+ en #) en de volgende variabelen:

  • ${client.authenticationName}: Geeft de authenticatienaam van de client aan. Voor meer informatie, zie sleuteltermen van klantmetadata.
  • ${client.attributes.x}: Vertegenwoordigt een attribuut dat aan een client is toegewezen wanneer de client wordt aangemaakt of bijgewerkt, waarbij x de exacte string van de attribuutsleutel is. Als bijvoorbeeld een client het attribuut area:section1heeft, maakt het onderwerpsjabloon area/${client.attributes.area}/telemetry het mogelijk dat alleen clients met dat attribuut kunnen publiceren op het MQTT-onderwerp area/section1/telemetry. Voor meer informatie, zie MQTT clients.

Opmerking

  • Onderwerpen die beginnen met $ zijn gereserveerd voor intern gebruik.
  • Een variabele kan een deel van een segment of een heel segment vertegenwoordigen, maar kan niet meer dan één segment dekken. Bijvoorbeeld, de onderwerptemplate machines/${client.authenticationName|.factory1}/temp komt overeen met onderwerpen zoals machines/machine1.factory1/temp en machines/machine2.factory1/temp.
  • Onderwerptemplates gebruiken de speciale tekens $ en |, die je misschien moet vermijden afhankelijk van de shell die je gebruikt. Bijvoorbeeld, in PowerShell kunt u deze tekens escapen zoals getoond in de volgende voorbeelden:
    • "vehicles/${client.authenticationName|dollar}/#"
    • vehicles/${client.authenticationName"|"dollar}/#

Om een onderwerpruimte te maken in het Azure-portaal of met de Azure CLI, raadpleeg MQTT-berichten publiceren en erop abonneren. Wanneer je een themaruimte benoemt, gebruik dan deze regels:

  • Een naam van een topic space kan 3-50 tekens lang zijn.
  • Een naam van een themaruimte kan alfanumerieke tekens en koppeltekens (), zonder spaties bevatten-.

Screenshot van de configuratie van de topicspace in het Azure-portaal.

Het volgende voorbeeld van Azure CLI creëert een onderwerpruimte met twee onderwerptemplates:

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

Opmerking

Updates voor de configuratie van de topicruimte kunnen een paar minuten duren om te verspreiden.