Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
MQTTnet är ett .NET-bibliotek med öppen källkod med höga prestanda för MQTT-baserad kommunikation. Den här artikeln beskriver hur du använder en Kubernetes-tjänstkontotoken och MQTTnet för att ansluta till MQTT-koordinator. Använd tjänstkontotoken för att ansluta program i kluster.
Exempelkod
Exempelkoden gör följande:
Skapar en MQTT-klient med hjälp av
MqttFactory
klassen:var mqttFactory = new MqttFactory(); var mqttClient = mqttFactory.CreateMqttClient();
Kubernetes-poddspecifikationen monterar tjänstkontot i containerfilsystemet och filinnehållet läses. Den monterade token används som lösenord med det välkända användarnamnet
K8S-SAT
:static string sat_auth_file = "/var/run/secrets/tokens/mqtt-client-token"; ... var satToken = File.ReadAllBytes(sat_auth_file);
MQTT-klientalternativen konfigureras med hjälp av
MqttClientOptions
klassen. ,MqttClientOptionsBuilder
som rekommenderas i klientdokumentationen , är det bästa sättet att ange alternativen:var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer(hostname, tcp_port) .WithProtocolVersion(MqttProtocolVersion.V500) .WithClientId("mqtt-client-dotnet") .WithAuthentication("K8S-SAT", satToken);
När du har konfigurerat MQTT-klientalternativen kan en anslutning upprättas. Följande kod visar hur du ansluter till en server. Du kan ersätta
CancellationToken.None
med en giltig AnnulleringToken om det behövs.var response = await mqttClient.ConnectAsync(mqttClientOptions.Build(), CancellationToken.None);
Skapa MQTT-meddelanden med hjälp av egenskaper direkt eller med
MqttApplicationMessageBuilder
. Den här klassen innehåller överlagringar för hantering av olika nyttolastformat. Bygg-API:et använder en flytande design. Följande kod visar hur du skriver ett programmeddelande och publicerar det till ett ämne som kallas sampletopic:var applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("sampletopic") .WithPayload("samplepayload" + counter++) .Build(); await mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
Poddspecifikation
Fältet serviceAccountName
i poddkonfigurationen måste matcha det tjänstkonto som är associerat med den token som används. Observera också att serviceAccountToken.expirationSeconds
är inställt på 86400 sekunder, och när den upphör att gälla måste du läsa in token igen från disken. Den här logiken implementeras inte i det här exemplet.
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"
Kör exemplet genom att följa anvisningarna i README-filen.