Sdílet prostřednictvím


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:

  1. Přihlásí se k odběru sensor/data tématu pro data snímačů.
  2. Při příjmu dat v tématu se publikuje do úložiště stavů zprostředkovatele MQTT.
  3. 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.
  4. Platnost dat starších než 30 sekund vyprší z úložiště stavů.
  5. 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

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.
  1. 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
    
  2. Nasaďte aplikaci spuštěním následujícího příkazu:

    kubectl apply -f app.yaml
    
  3. 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.

  1. 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    
    
  2. 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.

  1. V novém souboru s názvem client.yamlzadejte 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
    
  2. 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

  1. Otevřete prostředí pro klientský pod Mosquitto:

    kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
    
  2. 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
    
  3. 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

  1. Docker – pro sestavení kontejneru aplikace
  2. Registr kontejneru – pro hostování kontejneru aplikace

Sestavení aplikace

  1. Naklonujte úložiště Prozkoumat operace IoT:

    git clone https://github.com/Azure-Samples/explore-iot-operations
    
  2. Přejděte do adresáře kurzu Dapr:

    cd explore-iot-operations/tutorials/mq-event-driven-dapr/src
    
  3. Sestavte image Dockeru:

    docker build docker build . -t mq-event-driven-dapr
    
  4. 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>
    
  5. Aktualizujte si app.yaml nově vytvořenou image.

Řešení problému

Pokud se aplikace nespustí nebo se kontejnery zobrazí, CrashLoopBackoffdaprd 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

Další kroky