Onderwerpruimten in de MQTT-brokerfunctie van Azure Event Grid

Een onderwerpruimte vertegenwoordigt meerdere onderwerpen via een set onderwerpsjablonen. Onderwerpsjablonen zijn een uitbreiding van MQTT-filters die ondersteuning bieden voor variabelen, samen met de MQTT-jokertekens. Elke onderwerpruimte vertegenwoordigt de MQTT-onderwerpen die dezelfde set clients moeten gebruiken om te communiceren.

Onderwerpruimten worden gebruikt om het beheer van toegangsbeheer te vereenvoudigen door u in staat te stellen publiceren of abonneren op een groep onderwerpen tegelijk in plaats van de toegang voor elk afzonderlijk onderwerp te beheren. Als u een MQTT-onderwerp wilt publiceren of erop wilt abonneren, moet u het volgende doen:

  1. Maak een clientresource voor elke client die via MQTT moet communiceren.
  2. Maak een clientgroep met de clients die toegang nodig hebben tot het publiceren of abonneren op hetzelfde MQTT-onderwerp.
  3. Maak een onderwerpruimte met een onderwerpsjabloon die het beoogde onderwerp/onderwerpfilter vertegenwoordigt.
  4. Maak een machtigingsbinding om de clientgroep toegang te verlenen tot het publiceren of abonneren op de onderwerpruimte.

MQTT-onderwerpfilter:

Een MQTT-onderwerpfilter is een MQTT-onderwerp dat jokertekens kan bevatten voor een of meer van de segmenten, zodat het overeenkomt met meerdere MQTT-onderwerpen. Het wordt gebruikt om abonnementsaanvragen te vereenvoudigen, omdat één onderwerpfilter kan overeenkomen met meerdere onderwerpen.

MQTT Broker ondersteunt als volgt alle MQTT-jokertekens die zijn gedefinieerd door de MQTT-specificatie :

  • +: die overeenkomt met één segment.
    • Het onderwerpfilter: 'machines/+/alert' komt bijvoorbeeld overeen met de volgende onderwerpen:
      • machines/temp/alert
      • machines/vochtigheid/waarschuwing
  • #: die overeenkomt met nul of meer segmenten aan het einde van het onderwerp.
    • Het onderwerpfilter: 'machines/#' komt bijvoorbeeld overeen met de volgende onderwerpen:
      • machines
      • machines/temp
      • machines/vochtigheid
      • machines/temp/alert etc.

Zie Onderwerp-jokertekens in de MQTT-specificatie voor meer informatie over jokertekens.

Onderwerpsjablonen

Onderwerpsjablonen zijn een uitbreiding van MQTT-filters die ondersteuning bieden voor variabelen, samen met de MQTT-jokertekens. De configuratie van onderwerpruimten biedt ook gedetailleerd toegangsbeheer doordat u de autorisatie van elke client binnen een clientgroep kunt beheren om een eigen onderwerp te publiceren of erop te abonneren. Meer informatie over hoe onderwerpsjablonen gedetailleerde toegangsbeheer bieden.

Configuratie van onderwerpruimte:

Onderwerpruimten kunnen maximaal 10 onderwerpsjablonen groeperen. Onderwerpsjablonen ondersteunen MQTT-jokertekens (+ en #) en de volgende variabelen:

  • ${client.authenticationName}: deze variabele vertegenwoordigt de verificatienaam van de client. Meer informatie over clientverificatienamen.
  • ${client.attributes.x}: deze variabele vertegenwoordigt een toegewezen kenmerk aan een client tijdens het maken/bijwerken van de client, zoals 'x' is gelijk aan de exacte tekenreeks van de kenmerksleutel. Als een client bijvoorbeeld het kenmerk heeft, kan met een onderwerpsjabloon 'area/${client.attributes.area}/telemetry' alleen de clients met het clientkenmerk> area:section1 publiceren op het MQTT-onderwerp 'area/section1/telemetry'. Meer informatie over clientkenmerken.

Opmerking:

  • Onderwerpen die beginnen met $ zijn gereserveerd voor intern gebruik.

  • Een variabele kan een gedeelte van een segment of een heel segment vertegenwoordigen, maar kan niet meer dan één segment omvatten. Een onderwerpsjabloon kan bijvoorbeeld machines/${client.authenticationName| bevatten. factory1}/temp" komt overeen met onderwerpen 'machines/machine1.factory1/temp', 'machines/machine2.factory1/temp', enzovoort.

  • Onderwerpsjablonen gebruiken speciale tekens $ en | en deze moeten anders worden ontsnapt op basis van de gebruikte shell. In PowerShell kan $ worden ontsnapt met voertuigen/${dollar}telemetrie/#. Als u PowerShell gebruikt, kunt u deze speciale tekens ontsnappen, zoals wordt weergegeven in de volgende voorbeelden:

    • "vehicles/${client.authenticationName|dollar}/#"

    • vehicles/${client.authenticationName"|"dollar}/#

Configuratie van Azure Portal:

Gebruik de volgende stappen om een onderwerpruimte te maken:

  • Ga naar uw naamruimte in Azure Portal.
  • Selecteer +Onderwerpruimte onder Onderwerpruimten.
  • Wijs een naam toe aan de onderwerpruimte.

Notitie

  • De naam van de onderwerpruimte mag 3 tot 50 tekens lang zijn.
  • De naam van de onderwerpruimte kan alfanumerieke tekens, afbreekstreepjes(-) en geen spaties bevatten.
  • Voeg ten minste één onderwerpsjabloon toe door +Onderwerpsjabloon toevoegen te selecteren.
  • Selecteer Maken.

Schermopname van de configuratie van de onderwerpruimte.

Azure CLI-configuratie:

Gebruik de volgende opdrachten om een onderwerpruimte te maken:

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

Notitie

Het kan enkele minuten duren voordat de configuratie-updates voor de onderwerpruimte zijn doorgevoerd.

Volgende stappen:

Meer informatie over autorisatie en verificatie:

Quickstart:

Concepten: