Schemaregister gebruiken met WASM-modules

In het schemaregister kunt u berichtindelingen valideren en gegevensconsistentie in de gegevensverwerking garanderen. In dit artikel wordt beschreven hoe u het schemaregister gebruikt met WASM-modules in de Azure IoT-bewerkingen lokale ontwikkelomgeving.

Voordat u de stappen in dit artikel uitvoert, moet u uw lokale ontwikkelomgeving instellen en lokaal een grafiektoepassing bouwen en uitvoeren. Zie voor meer informatie Build WASM-modules voor gegevensstromen.

Vereiste voorwaarden

Voltooi de vereisten die worden vermeld in build-WASM-modules voor gegevensstromen.

Open de voorbeeldwerkruimte van het schemaregister

Kloon de opslagplaats Explore IoT Operations als u dat nog niet hebt gedaan.

Open de map samples/wasm/schema-registry-scenario. Deze map bevat de volgende resources:

  • graph.dataflow.yaml - De configuratie van de gegevensstroomgrafiek.
  • tk_schema_config.json - Het JSON-schema dat de host-app lokaal gebruikt om binnenkomende berichtpayloads te valideren voordat ze downstreamoperators bereiken. Houd dit bestand gesynchroniseerd met elk schema dat u naar uw Microsoft Azure-omgeving publiceert.
  • data/ - Voorbeeldinvoergegevens met verschillende berichtindelingen voor testen.
  • operators/filter/ - Broncode voor de filteroperator.
  • (Optional) hostapp.env.list - De VS Code-extensie genereert automatisch een bij runtime toe te voegen TK_SCHEMA_CONFIG_PATH=tk_schema_config.json. Als u uw eigen schemabestand opgeeft, moet u ervoor zorgen dat de variabele ernaar verwijst.

Inzicht in de schemaconfiguratie

Open het tk_schema_config.json bestand om de schemadefinitie weer te geven:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "humidity": {
      "type": "integer"
    },
    "temperature": {
      "type": "number"
    }
  }
}

Dit schema definieert een JSON-object op het hoogste niveau dat twee numerieke eigenschappen kan bevatten: humidity (geheel getal) en temperature (getal). Voeg een "required": ["humidity", "temperature"] matrix toe als u ze beide nodig hebt, of breid de sectie uit naarmate uw properties payload-indeling zich ontwikkelt.

De volgende beperkingen gelden voor het lokale schemabestand (tk_schema_config.json). Het schemabestand:

  • Maakt gebruik van de standaard syntaxis van het JSON-schema draft-07, hetzelfde concept dat wordt ondersteund door het Azure IoT-bewerkingen schemaregister.
  • Is functioneel dezelfde inhoud die u in het cloudschemaregister registreert. U kunt kopiëren en plakken tussen de twee om consistent te blijven.
  • Wordt verwezen door de host-app via de omgevingsvariabele TK_SCHEMA_CONFIG_PATH.

Momenteel zijn de volgende beperkingen van toepassing in de lokale ontwikkelingsruntime:

  • Er wordt slechts één schemaconfiguratiebestand geladen. Het opnemen van meerdere bestanden of het scannen van mappen wordt niet ondersteund.
  • $ref naar externe bestanden of URL's wordt niet lokaal ondersteund. Houd het schema op zichzelf. U kunt interne verwijzingen naar JSON-aanwijzers gebruiken, zoals {"$ref":"#/components/..."}.
  • Veelgebruikte concept-07-trefwoorden zoals type, properties, required, enum, minimum, maximum, allOf, anyOf, oneOf, not en items werken allemaal. De onderliggende validator kan minder algemene of geavanceerde functies zoals contentEncoding en contentMediaTypenegeren.
  • Houd de grootte van uw schema's tot minder dan ~1 MB voor snelle koude start.
  • Versiebeheer- en schemaontwikkelingsbeleid worden niet lokaal afgedwongen. U bent verantwoordelijk voor het in overeenstemming blijven met het cloudregister.

Als u afhankelijk bent van geavanceerde constructies die lokaal mislukken, valideert u hetzelfde schema met het cloudregister na publicatie om pariteit te garanderen.

Zie concepten van schema-registraties in Azure IoT-bewerkingen voor meer informatie.

De testgegevens controleren

De data/ map bevat drie testbestanden:

  • temperature_humidity_payload_1.json - Bevat zowel temperatuur- als vochtigheidsgegevens. De vochtigheidswaarde (175.1) is echter geen geheel getal zoals opgegeven in het schema, dus de gegevens mislukken schemavalidatie en worden uitgefilterd.
  • temperature_humidity_payload_2.json - Bevat alleen vochtigheidsgegevens en wordt uitgefilterd.
  • temperature_humidity_payload_3.json - Bevat zowel temperatuur- als vochtigheidsgegevens en geeft validatie door.

Het schemaregisterscenario bouwen en uitvoeren

Als u de lokale uitvoeringsomgeving eerder hebt gestopt, drukt u op Ctrl+Shift+P om het opdrachtenpalet te openen en te zoeken naar Azure IoT-bewerkingen: Ontwikkelomgeving starten. Selecteer release als de uitvoeringsmodus.

  1. Druk op Ctrl+Shift+P om het opdrachtenpalet te openen en te zoeken naar Azure IoT-bewerkingen: Bouw alle Gegevensstroom operators.

  2. Selecteer release als de buildmodus. Wacht tot de opbouw is voltooid.

  3. Druk nogmaals op Ctrl+Shift+P en zoek naar Azure IoT-bewerkingen: Application Graph uitvoeren.

  4. Selecteer het graph.dataflow.yaml grafiekbestand.

  5. Selecteer release als de uitvoeringsmodus.

  6. Selecteer de data map in uw VS Code-werkruimte voor uw invoergegevens. De DevX-container wordt gestart om de grafiek uit te voeren met de voorbeeldinvoer.

Schemavalidatie controleren

Nadat de verwerking is voltooid:

  1. Controleer de data/output/ map voor de resultaten.

  2. De uitvoer bevat alleen de verwerkte versie van het temperature_humidity_payload_3.json bericht omdat het voldoet aan het schema.

  3. Het data/output/logs/host-app.log bestand bevat logboekvermeldingen die aangeven welke berichten worden geaccepteerd of geweigerd op basis van schemavalidatie.

In dit voorbeeld ziet u hoe het schemaregister binnenkomende berichten valideert en berichten filtert die niet voldoen aan het gedefinieerde schema.

Stop de lokale uitvoeringsomgeving wanneer u klaar bent met testen in de releasemodus door op Ctrl+Shift+P te drukken en te zoeken naar Azure IoT-bewerkingen: Ontwikkelomgeving stoppen.