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:
- Maak een clientresource voor elke client die via MQTT moet communiceren.
- Maak een clientgroep met de clients die toegang nodig hebben tot het publiceren of abonneren op hetzelfde MQTT-onderwerp.
- Maak een onderwerpruimte met een onderwerpsjabloon die het beoogde onderwerp/onderwerpfilter vertegenwoordigt.
- 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
- Het onderwerpfilter: 'machines/+/alert' komt bijvoorbeeld overeen met de volgende onderwerpen:
- #: 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.
- Het onderwerpfilter: 'machines/#' komt bijvoorbeeld overeen met de volgende onderwerpen:
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.
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: