Kurz: Sestavení aplikace řízené událostmi pomocí zprostředkovatele Dapr a MQTT
V tomto názorném postupu nasadíte do clusteru aplikaci Dapr. Aplikace Dapr využívá simulovaná data MQTT publikovaná ve zprostředkovateli MQTT, použije funkci vytváření oken a potom publikuje výsledek zpět do zprostředkovatele MQTT. Publikovaný výstup představuje, jak se dají na hraničních zařízeních agregovat data s velkým objemem, aby se snížila frekvence a velikost zpráv. Aplikace Dapr je bezstavová a používá úložiště stavů zprostředkovatele MQTT k ukládání minulých hodnot potřebných pro výpočty oken.
Aplikace Dapr provádí následující kroky:
- Přihlásí se k odběru
sensor/data
tématu pro data snímačů. - Při příjmu dat v tématu se publikuje do úložiště stavů zprostředkovatele MQTT.
- Každých 10 sekund načte data z úložiště stavu a vypočítá min, maximum, střední hodnotu, medián a 75. percentil na základě časových razítek dat snímačů za posledních 30 sekund.
- Platnost dat starších než 30 sekund vyprší z úložiště stavů.
- Výsledek se publikuje do
sensor/window_data
tématu ve formátu JSON.
Poznámka:
Tento kurz zakáže Dapr CloudEvents , které umožňují publikovat a odebírat pomocí nezpracovaného MQTT.
Požadavky
- Nainstalované operace Azure IoT – Rychlý start: Spuštění operací Azure IoT v GitHub Codespaces s využitím K3s
- Nainstalované komponenty dapr zprostředkovatele MQTT – Instalace komponent dapr zprostředkovatele MQTT
Nasazení aplikace Dapr
V tuto chvíli můžete nasadit aplikaci Dapr. Registrace komponent nenasazuje přidružený binární soubor, který je zabalený v kontejneru. Pokud chcete nasadit binární soubor společně s vaší aplikací, můžete pomocí nasazení seskupit kontejnerizovanou aplikaci Dapr a dvě komponenty dohromady.
Začněte vytvořením souboru yaml, který používá následující definice:
Komponenta | Popis |
---|---|
volumes.mqtt-client-token |
Sat sloužící k ověřování komponent pluggable Dapr pomocí zprostředkovatele MQTT a úložiště stavů |
volumes.aio-internal-ca-cert-chain |
Řetěz důvěryhodnosti pro ověření certifikátu TLS zprostředkovatele MQTT |
containers.mq-event-driven |
Předem připravený kontejner aplikace Dapr. |
Uložte následující yaml nasazení do souboru s názvem
app.yaml
:apiVersion: v1 kind: ServiceAccount metadata: name: dapr-client namespace: azure-iot-operations annotations: aio-broker-auth/group: dapr-workload --- apiVersion: apps/v1 kind: Deployment metadata: name: mq-event-driven-dapr namespace: azure-iot-operations spec: selector: matchLabels: app: mq-event-driven-dapr template: metadata: labels: app: mq-event-driven-dapr annotations: dapr.io/enabled: "true" dapr.io/inject-pluggable-components: "true" dapr.io/app-id: "mq-event-driven-dapr" dapr.io/app-port: "6001" dapr.io/app-protocol: "grpc" spec: serviceAccountName: dapr-client volumes: # SAT token used to authenticate between Dapr and the MQTT broker - name: mqtt-client-token projected: sources: - serviceAccountToken: path: mqtt-client-token audience: aio-internal expirationSeconds: 86400 # Certificate chain for Dapr to validate the MQTT broker - name: aio-ca-trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle containers: - name: mq-event-driven-dapr image: ghcr.io/azure-samples/explore-iot-operations/mq-event-driven-dapr:latest
Nasaďte aplikaci spuštěním následujícího příkazu:
kubectl apply -f app.yaml
Ověřte, že se aplikace úspěšně nasadila. Pod by měl hlásit, že všechny kontejnery jsou připravené po krátkém intervalu, jak je znázorněno následujícím příkazem:
kubectl get pods -l app=mq-event-driven-dapr -n azure-iot-operations
S následujícím výstupem:
NAME READY STATUS RESTARTS AGE mq-event-driven-dapr 3/3 Running 0 30s
Nasazení simulátoru
Simulace testovacích dat nasazením úlohy Kubernetes Simuluje senzor odesláním vzorkové teploty, vibrací a čtení tlaku pravidelně do zprostředkovatele MQTT pomocí klienta MQTT v sensor/data
tématu.
Nasaďte simulátor z úložiště Prozkoumat operace IoT:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/tutorials/mq-event-driven-dapr/simulate-data.yaml
Ověřte, že simulátor běží správně:
kubectl logs deployment/mqtt-publisher-deployment -n azure-iot-operations -f
S následujícím výstupem:
Get:1 http://deb.debian.org/debian stable InRelease [151 kB] Get:2 http://deb.debian.org/debian stable-updates InRelease [52.1 kB] Get:3 http://deb.debian.org/debian-security stable-security InRelease [48.0 kB] Get:4 http://deb.debian.org/debian stable/main amd64 Packages [8780 kB] Get:5 http://deb.debian.org/debian stable-updates/main amd64 Packages [6668 B] Get:6 http://deb.debian.org/debian-security stable-security/main amd64 Packages [101 kB] Fetched 9139 kB in 3s (3570 kB/s) ... Messages published in the last 10 seconds: 10 Messages published in the last 10 seconds: 10 Messages published in the last 10 seconds: 10
Nasazení klienta MQTT
Pokud chcete ověřit, že most MQTT funguje, nasaďte do clusteru klienta MQTT.
V novém souboru s názvem
client.yaml
zadejte nasazení klienta:apiVersion: v1 kind: ServiceAccount metadata: name: mqtt-client namespace: azure-iot-operations --- apiVersion: v1 kind: Pod metadata: name: mqtt-client namespace: azure-iot-operations spec: serviceAccountName: mqtt-client containers: - image: alpine name: mqtt-client command: ["sh", "-c"] args: ["apk add mosquitto-clients mqttui && sleep infinity"] volumeMounts: - name: mqtt-client-token mountPath: /var/run/secrets/tokens - name: aio-ca-trust-bundle mountPath: /var/run/certs/aio-internal-ca-cert/ volumes: - name: mqtt-client-token projected: sources: - serviceAccountToken: path: mqtt-client-token audience: aio-internal expirationSeconds: 86400 - name: aio-ca-trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle
Použijte soubor nasazení s kubectl:
kubectl apply -f client.yaml
Ověření výstupu:
pod/mqtt-client created
Ověření výstupu aplikace Dapr
Otevřete prostředí pro klientský pod Mosquitto:
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Přihlaste se k odběru
sensor/window_data
tématu, abyste mohli sledovat publikovaný výstup z aplikace Dapr:mosquitto_sub -L mqtt://aio-broker/sensor/window_data
Ověřte, že aplikace provádí výpočet posuvných oken pro různé senzory každých 10 sekund:
{ "timestamp": "2023-11-16T21:59:53.939690+00:00", "window_size": 30, "temperature": { "min": 553.024, "max": 598.907, "mean": 576.4647857142858, "median": 577.4905, "75_per": 585.96125, "count": 28 }, "pressure": { "min": 290.605, "max": 299.781, "mean": 295.521, "median": 295.648, "75_per": 297.64050000000003, "count": 28 }, "vibration": { "min": 0.00124192, "max": 0.00491257, "mean": 0.0031171810714285715, "median": 0.003199235, "75_per": 0.0038769150000000003, "count": 28 } }
Volitelné – Vytvoření aplikace Dapr
Tento kurz používá předem připravený kontejner aplikace Dapr. Pokud chcete kód upravit a sestavit sami, postupujte takto:
Požadavky
- Docker – pro sestavení kontejneru aplikace
- Registr kontejneru – pro hostování kontejneru aplikace
Sestavení aplikace
Naklonujte úložiště Prozkoumat operace IoT:
git clone https://github.com/Azure-Samples/explore-iot-operations
Přejděte do adresáře kurzu Dapr:
cd explore-iot-operations/tutorials/mq-event-driven-dapr/src
Sestavte image Dockeru:
docker build docker build . -t mq-event-driven-dapr
Pokud chcete využívat aplikaci v clusteru Kubernetes, musíte odeslat image do registru kontejneru, jako je Azure Container Registry. Můžete také odeslat do místního registru kontejneru, jako je minikube nebo Docker.
docker tag mq-event-driven-dapr <container-alias> docker push <container-alias>
Aktualizujte si
app.yaml
nově vytvořenou image.
Řešení problému
Pokud se aplikace nespustí nebo se kontejnery zobrazí, CrashLoopBackoff
daprd
protokol kontejneru často obsahuje užitečné informace.
Spuštěním následujícího příkazu zobrazte protokoly pro komponentu daprd:
kubectl logs -l app=mq-event-driven-dapr -n azure-iot-operations -c daprd