Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
MQTTnet- ist eine Open-Source-, .NET-Hochleistungsbibliothek für MQTT-basierte Kommunikation. In diesem Artikel wird erläutert, wie Sie ein Kubernetes-Dienstkontotoken und MQTTnet verwenden, um eine Verbindung mit dem MQTT-Broker herzustellen. Verwenden Sie Dienstkontotoken, um In-Cluster-Anwendungen zu verbinden.
Beispielcode
Der Beispielcode führt folgende Aktionen aus:
Erstellt einen MQTT-Client mithilfe der
MqttFactory
-Klasse:var mqttFactory = new MqttFactory(); var mqttClient = mqttFactory.CreateMqttClient();
Die Kubernetes-Podspezifikation stellt das Dienstkonto im Containerdateisystem bereit, und der Dateiinhalt wird gelesen. Das bereitgestellte Token wird als Kennwort mit dem bekannten Benutzernamen
K8S-SAT
verwendet:static string sat_auth_file = "/var/run/secrets/tokens/mqtt-client-token"; ... var satToken = File.ReadAllBytes(sat_auth_file);
Die MQTT-Clientoptionen werden mithilfe der
MqttClientOptions
-Klasse konfiguriert. DieMqttClientOptionsBuilder
in der Clientdokumentation empfohlene Methode ist die bevorzugte Methode zum Festlegen der Optionen:var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer(hostname, tcp_port) .WithProtocolVersion(MqttProtocolVersion.V500) .WithClientId("mqtt-client-dotnet") .WithAuthentication("K8S-SAT", satToken);
Nachdem Sie die MQTT-Clientoptionen eingerichtet haben, kann eine Verbindung hergestellt werden. Der folgende Code zeigt, wie eine Verbindung mit einem Server hergestellt wird. Sie können
CancellationToken.None
bei Bedarf durch ein gültiges CancellationToken ersetzen.var response = await mqttClient.ConnectAsync(mqttClientOptions.Build(), CancellationToken.None);
Erstellen Sie MQTT-Nachrichten mithilfe von Eigenschaften direkt oder mit
MqttApplicationMessageBuilder
. Diese Klasse stellt Überladungen zum Behandeln verschiedener Nutzlastformate bereit. Die Builder-API verwendet ein flüssiges Design. Der folgende Code zeigt, wie Sie eine Anwendungsnachricht verfassen und in einem Thema veröffentlichen, das als Sampletopic bezeichnet wird:var applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("sampletopic") .WithPayload("samplepayload" + counter++) .Build(); await mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
Podspezifikation
Das serviceAccountName
-Feld muss in der Podkonfiguration mit dem Dienstkonto übereinstimmen, das dem verwendeten Token zugeordnet ist. Beachten Sie außerdem, dass die serviceAccountToken.expirationSeconds
Einstellung auf 86400 Sekunden festgelegt ist und wenn sie abläuft, müssen Sie das Token vom Datenträger neu laden. Diese Logik wird in diesem Beispiel nicht implementiert.
apiVersion: v1
kind: ServiceAccount
metadata:
name: mqtt-client
namespace: azure-iot-operations
---
apiVersion: v1
kind: Pod
metadata:
name: mqtt-client-dotnet
namespace: azure-iot-operations
spec:
serviceAccountName: mqtt-client
volumes:
# The SAT token authenticates the application with the MQTT broker
- name: mqtt-client-token
projected:
sources:
- serviceAccountToken:
path: mqtt-client-token
audience: aio-internal
expirationSeconds: 86400
# Certificate chain for the application to validate the MQTT broker
- name: aio-ca-trust-bundle
configMap:
name: azure-iot-operations-aio-ca-trust-bundle
containers:
- name: mqtt-client-dotnet
image: ghcr.io/azure-samples/explore-iot-operations/mqtt-client-dotnet:latest
volumeMounts:
- name: mqtt-client-token
mountPath: /var/run/secrets/tokens/
- name: aio-ca-trust-bundle
mountPath: /var/run/certs/aio-internal-ca-cert/
env:
- name: hostname
value: "aio-broker"
- name: tcpPort
value: "18883"
- name: useTls
value: "true"
- name: caFile
value: "/var/run/certs/aio-internal-ca-cert/ca.crt"
- name: satAuthFile
value: "/var/run/secrets/tokens/mqtt-client-token"
Führen Sie das Beispiel aus, indem Sie den Anweisungen in der INFODATEI folgen.