Gebruik IoT Hub berichtroutering om apparaat-naar-cloud-berichten te verzenden naar verschillende eindpunten

Notitie

Sommige van de functies die in dit artikel worden genoemd, zoals cloud-naar-apparaat-berichten, apparaatdubbels en apparaatbeheer, zijn alleen beschikbaar in de standaardlaag van IoT Hub. Raadpleeg How to choose the right IoT Hub tier (De juiste IoT Hub-prijscategorie kiezen) voor meer informatie over de Basic- en Standard-prijscategorieën van IoT Hub.

Met berichtroutering kunt u berichten van uw apparaten op een geautomatiseerde, schaalbare en betrouwbare manier verzenden naar cloudservices. Berichtroutering kan worden gebruikt voor:

  • Het verzenden van telemetrieberichten van apparaten, evenals gebeurtenissen met name, levenscyclusgebeurtenissen van apparaten, wijzigingsgebeurtenissen van apparaat dubbels, wijzigingsgebeurtenissen van digitale dubbels en gebeurtenissen van de apparaatverbindingstoestand naar het ingebouwde eindpunt en aangepaste eindpunten. Meer informatie over routerings-eindpunten. Zie Understand IoT Plug en Play digital twins (Informatie over IoT-Plug en Play digital twins) voor meer informatie over de gebeurtenissen die worden verzonden vanaf IoT Plug en Play-apparaten.

  • Gegevens filteren voordat ze naar verschillende eindpunten worden doorgeleid door uitgebreide query's toe te passen. Met berichtroutering kunt u query's uitvoeren op de berichteigenschappen en bericht body, evenals tags van apparaattwee en eigenschappen van apparaattwee. Meer informatie over het gebruik van query's in berichtroutering.

IoT Hub moet schrijftoegang tot deze service-eindpunten hebben om berichtroutering te laten werken. Als u uw eindpunten configureert via de Azure Portal, worden de benodigde machtigingen voor u toegevoegd. Zorg ervoor dat u uw services configureert om de verwachte doorvoer te ondersteunen. Als u bijvoorbeeld Event Hubs als een aangepast eindpunt gebruikt, moet u de doorvoereenheden voor die Event Hub configureren, zodat deze de ingress van gebeurtenissen kan verwerken die u wilt verzenden via IoT Hub berichtroutering. Op dezelfde manier moet u, wanneer u een Service Bus-wachtrij als eindpunt gebruikt, de maximale grootte configureren om ervoor te zorgen dat de wachtrij alle binnengegaane gegevens kan bevatten, totdat deze door consumenten worden weggegaan. Wanneer u uw IoT-oplossing voor het eerst configureert, moet u mogelijk uw andere eindpunten bewaken en de werkelijke belasting aanpassen.

De IoT Hub definieert een algemene indeling voor alle apparaat-naar-cloud-berichten voor interoperabiliteit tussen protocollen. Als een bericht overeenkomt met meerdere routes die naar hetzelfde eindpunt wijzen, levert IoT Hub slechts één keer een bericht aan dat eindpunt. Daarom hoeft u ontdubbeling niet te configureren voor uw Service Bus wachtrij of onderwerp. Gebruik deze zelfstudie om te leren hoe u berichtroutering configureert.

Routeringseindpunten

Een IoT-hub heeft een standaard ingebouwd eindpunt (berichten/gebeurtenissen) dat compatibel is met Event Hubs. U kunt aangepaste eindpunten maken om berichten naar te sturen door andere services in uw abonnement te koppelen aan de IoT Hub.

Elk bericht wordt doorgeleid naar alle eindpunten waarvan de routeringsquery's overeenkomt. Met andere woorden, een bericht kan worden gerouteerd naar meerdere eindpunten.

Als uw aangepaste eindpunt firewallconfiguraties heeft, kunt u overwegen de vertrouwde first party-uitzondering van Microsoft te gebruiken.

IoT Hub ondersteunt momenteel de volgende eindpunten:

  • Ingebouwd eindpunt
  • Azure Storage
  • Service Bus Onderwerpen over wachtrijen Service Bus wachtrijen
  • Event Hubs

Ingebouwd eindpunt als een routerings-eindpunt

U kunt standard Event Hubs-integratie en SDK's gebruiken om apparaat-naar-cloud-berichten te ontvangen van het ingebouwde eindpunt (berichten/gebeurtenissen). Zodra een route is gemaakt, worden de gegevens niet meer naar het ingebouwde eindpunt gestroomd, tenzij er een route naar dat eindpunt wordt gemaakt. Zelfs als er geen routes worden gemaakt, moet een terugvalroute worden ingeschakeld om berichten naar het ingebouwde eindpunt te sturen. De terugval is standaard ingeschakeld als u uw hub maakt met behulp van de portal of de CLI.

Azure Storage als een routerings-eindpunt

Er zijn twee opslagservices IoT Hub naar kunnen worden doorgeleid: Azure Blob Storage- en Azure Data Lake Storage Gen2-accounts (ADLS Gen2). Azure Data Lake Storage-accounts zijnhiërarchische naamruimteopslagaccounts die zijn gebaseerd op blob-opslag. Beide gebruiken blobs voor hun opslag.

IoT Hub ondersteunt het schrijven van gegevens naar Azure Storage in de Apache Avro-indeling en de JSON-indeling. De standaardindeling is AVRO. Wanneer u JSON-codering gebruikt, moet u contentType instellen op application/json en contentEncoding op UTF-8 in de systeemeigenschappen van het bericht. Beide waarden zijn niet-casegevoelig. Als de inhoudscoderen niet is ingesteld, IoT Hub de berichten in base 64 gecodeerde indeling.

De coderingsindeling kan alleen worden ingesteld wanneer het eindpunt voor blobopslag is geconfigureerd; Het kan niet worden bewerkt voor een bestaand eindpunt. Als u wilt schakelen tussen coderingsindelingen voor een bestaand eindpunt, moet u end endoint verwijderen en opnieuw maken met de 9e indeling. Een handige strategie kan zijn om een nieuw aangepast eindpunt met de gewenste coderingsindeling te maken en een parallelle route toe te voegen aan dat eindpunt. Op deze manier kunt u uw gegevens controleren voordat u het bestaande eindpunt kunt verwijderen.

U kunt de coderingsindeling selecteren met behulp van de IoT Hub Create or Update REST API, met name de RoutingStorageContainerProperties, de Azure Portal, Azure CLI of Azure PowerShell. In de volgende afbeelding ziet u hoe u de coderingsindeling in de Azure Portal.

Eindpuntcoderen voor Blob Storage

IoT Hub berichten in batches en schrijft gegevens naar de opslag wanneer de batch een bepaalde grootte bereikt of een bepaalde hoeveelheid tijd is verstreken. IoT Hub standaard de volgende bestandsnaamconventie:

{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}

U kunt elke bestandsnaamconventie gebruiken, maar u moet alle vermelde tokens gebruiken. IoT Hub schrijft naar een lege blob als er geen gegevens zijn om te schrijven.

We raden u aan de blobs of bestanden weer te geven en ze vervolgens te doorlopende, om ervoor te zorgen dat alle blobs of bestanden worden gelezen zonder aannames te doen over de partitie. Het partitiebereik kan mogelijk worden gewijzigd tijdens een door Microsoft geïnitieerde failover of IoT Hub handmatige failover. U kunt de API List Blobs gebruiken om de lijst met blobs op te snoemen of list ADLS Gen2 API voor de lijst met bestanden. Zie het volgende voorbeeld als richtlijn.

public void ListBlobsInContainer(string containerName, string iothub)
{
    var storageAccount = CloudStorageAccount.Parse(this.blobConnectionString);
    var cloudBlobContainer = storageAccount.CreateCloudBlobClient().GetContainerReference(containerName);
    if (cloudBlobContainer.Exists())
    {
        var results = cloudBlobContainer.ListBlobs(prefix: $"{iothub}/");
        foreach (IListBlobItem item in results)
        {
            Console.WriteLine(item.Uri);
        }
    }
}

Als u een met Azure Data Lake Gen2 compatibel opslagaccount wilt maken, maakt u een nieuw V2-opslagaccount en selecteert u Ingeschakeld in het veld Hiërarchische naamruimte op het tabblad Geavanceerd, zoals wordt weergegeven in de volgende afbeelding:

Azure Date Lake Gen2-opslag selecteren

Service Bus Wachtrijen en Service Bus onderwerpen als een routerings-eindpunt

Service Bus wachtrijen en onderwerpen die worden gebruikt als IoT Hub eindpunten mogen sessies of duplicaatdetectie niet zijn ingeschakeld. Als een van deze opties is ingeschakeld, wordt het eindpunt weergegeven als Onbereikbaar in de Azure Portal.

Event Hubs als een routerings-eindpunt

Naast het ingebouwde, compatibele Event Hubs eindpunt, kunt u ook gegevens doorverkenken naar aangepaste eindpunten van het type Event Hubs.

Gegevens lezen die zijn gerouteerd

U kunt een route configureren door deze zelfstudie te volgen.

Gebruik de volgende zelfstudies om te leren hoe u berichten van een eindpunt kunt lezen.

Alternatieve route

De terugvalroute verzendt alle berichten die niet voldoen aan de queryvoorwaarden op een van de bestaande routes naar de ingebouwde Event Hubs (berichten/gebeurtenissen), die compatibel is met Event Hubs. Als berichtroutering is ingeschakeld, kunt u de mogelijkheid voor terugvalroute inschakelen. Zodra een route is gemaakt, worden de gegevens niet meer naar het ingebouwde eindpunt gestroomd, tenzij er een route naar dat eindpunt wordt gemaakt. Als er geen routes naar het ingebouwde eindpunt zijn en een terugvalroute is ingeschakeld, worden alleen berichten verzonden die niet overeenkomen met queryvoorwaarden op routes naar het ingebouwde eindpunt. Als alle bestaande routes worden verwijderd, moet terugvalroute ook zijn ingeschakeld voor het ontvangen van alle gegevens op het ingebouwde eindpunt.

U kunt de terugvalroute in- of uitschakelen op Azure Portal->blade Berichtroutering. U kunt ook Azure Resource Manager voor FallbackRouteProperties gebruiken om een aangepast eindpunt te gebruiken voor terugvalroute.

Niet-telemetriegebeurtenissen

Naast telemetrie van apparaten maakt berichtroutering ook het verzenden van wijzigingsgebeurtenissen van apparaattweeen, levenscyclusgebeurtenissen van apparaten, wijzigingsgebeurtenissen van digitale dubbels en gebeurtenissen van de apparaatverbindingstoestand mogelijk. Als er bijvoorbeeld een route wordt gemaakt met een gegevensbron die is ingesteld op wijzigingsgebeurtenissen van apparaattwee, verzendt IoT Hub berichten naar het eindpunt dat de wijziging in de apparaat dubbel bevat. Als er een route wordt gemaakt met gegevensbron ingesteld op levenscyclusgebeurtenissen van apparaten, verzendt IoT Hub een bericht dat aangeeft of het apparaat is verwijderd of gemaakt. Als onderdeel van Azure IoT Plug en Playkan een ontwikkelaar routes maken met een gegevensbron die is ingesteld op wijzigingsgebeurtenissen voor digitale tweelingen en IoT Hub berichten verzendt wanneer een eigenschap van een digitale tweeling wordt ingesteld of gewijzigd, een digitale tweeling wordt vervangen of wanneer er een wijzigingsgebeurtenis voor de onderliggende apparaat dubbels gebeurt. Als ten slotte een route wordt gemaakt met gegevensbron ingesteld op apparaatverbindingstoestandgebeurtenissen, verzendt IoT Hub een bericht dat aangeeft of het apparaat is verbonden of de verbinding is verbroken.

IoT Hub kan ook worden geïntegreerd met Azure Event Grid om apparaatgebeurtenissen te publiceren ter ondersteuning van realtime integraties en automatisering van werkstromen op basis van deze gebeurtenissen. Bekijk de belangrijkste verschillen tussen berichtroutering en Event Grid om te leren wat het beste werkt voor uw scenario.

Beperkingen voor apparaatverbindingsgebeurtenissen

Als een apparaat verbindingstoestandgebeurtenissen wilt ontvangen, moet een apparaat telemetrie of een cloud-naar-apparaat-ontvangstbericht aanroepen met IoT Hub. Als een apparaat echter het AMQP-protocol gebruikt om verbinding te maken met IoT Hub, raden we het apparaat aan om de bewerking voor het ontvangen van berichten van cloud naar apparaat aan te roepen, anders kunnen de meldingen over de verbindingstoestand met enkele minuten worden vertraagd. Als uw apparaat verbinding maakt met het MQTT-protocol, IoT Hub de cloud-naar-apparaat-koppeling geopend. Als u de cloud-naar-apparaat-koppeling voor AMQP wilt openen, roept u de Receive Async API aan.

De apparaat-naar-cloud-koppeling blijft geopend zolang het apparaat telemetrie verzendt.

Als de verbindingsers van het apparaat, wat betekent dat als het apparaat regelmatig verbinding maakt en de verbinding wordt verbroken, IoT Hub niet elke verbindingstoestand verzendt, maar de huidige verbindingstoestand publiceert die is gemaakt op een periodieke momentopname van 60 sec totdat het verbreken is gestopt. Het ontvangen van dezelfde verbindingstoestandgebeurtenis met verschillende sequentienummers of verschillende verbindingstoestandsgebeurtenissen betekent beide dat de verbindingstoestand van het apparaat is gewijzigd.

Routes testen

Wanneer u een nieuwe route maakt of een bestaande route bewerkt, moet u de routequery testen met een voorbeeldbericht. U kunt afzonderlijke routes testen of alle routes tegelijk testen en er worden geen berichten naar de eindpunten gerouteerd tijdens de test. Azure Portal, Azure Resource Manager, Azure PowerShell en Azure CLI kunnen worden gebruikt voor het testen. Resultaten helpen te bepalen of het voorbeeldbericht overeen komt met de query, het bericht niet overeen komt met de query of dat de test niet kan worden uitgevoerd omdat het voorbeeldbericht of de querysyntaxis onjuist zijn. Zie Route testen en Alle routes testen voor meer informatie.

Latentie

Wanneer u apparaat-naar-cloud-telemetrieberichten routeert met behulp van ingebouwde eindpunten, is er een lichte toename in de end-to-end-latentie na het maken van de eerste route.

In de meeste gevallen is de gemiddelde toename in latentie minder dan 500 ms. U kunt de latentie bewaken met behulp van Routering: berichtlatentie voor berichten/gebeurtenissen of d2c.endpoints.latency.builtIn.events IoT Hub metrische gegevens. Het maken of verwijderen van een route na de eerste heeft geen invloed op de end-to-end-latentie.

Bewaking en problemen oplossen

IoT Hub biedt verschillende metrische gegevens met betrekking tot routering en eindpunten, om u een overzicht te geven van de status van uw hub en verzonden berichten. Zie Metrische gegevens in de referentie voor bewakingsgegevens IoT Hub een lijst met alle metrische gegevens die zijn uitgesplitsdper functionele categorie. U kunt fouten bijhouden die optreden tijdens de evaluatie van een routeringsquery en eindpunttoestand, zoals waargenomen door IoT Hub met de categorie routes in IoT Hub resourcelogboeken. Zie Monitor IoT Hub voor meer informatie over het gebruik van metrische gegevens en resourcelogboeken met IoT Hub.

U kunt de REST API Endpoint Health om de status van de eindpunten op te halen.

Gebruik de gids voor probleemoplossing voor routering voor meer informatie en ondersteuning voor het oplossen van routering.

Volgende stappen