MQTTnet を使用して MQTT ブローカーに接続する分散型アプリケーションのワークロードを開発する
MQTTnet は、MQTT ベースの通信用の、オープンソースのハイ パフォーマンス .NET ライブラリです。 この記事では、Kubernetes サービス アカウント トークンと MQTTnet を使用して、MQTT ブローカーに接続します。 サービス アカウント トークンを使用して、クラスター内アプリケーションを接続する必要があります。
サンプル コード
サンプル コードでは、次の手順を実行します。
MqttFactory
クラスを使用して MQTT クライアントを作成します。var mqttFactory = new MqttFactory(); var mqttClient = mqttFactory.CreateMqttClient();
Kubernetes ポッド仕様では、サービス アカウントをコンテナー ファイル システムにマウントします。 ファイルの内容が読み取られます: ##3。 マウントされたトークンは、既知のユーザー名
K8S-SAT
を持つパスワードとして使用されます。static string sat_auth_file = "/var/run/secrets/tokens/mqtt-client-token"; ... var satToken = File.ReadAllBytes(sat_auth_file);
MQTT クライアント オプションは、
MqttClientOptions
クラスを使用して構成されます。 オプションを設定する方法として、client のドキュメントで説明されているように、MqttClientOptionsBuilder
を使用することをお勧めします。var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer(hostname, tcp_port) .WithProtocolVersion(MqttProtocolVersion.V500) .WithClientId("mqtt-client-dotnet") .WithAuthentication("K8S-SAT", satToken);
MQTT クライアント オプションを設定した後、接続を確立できます。 次のコードは、サーバーに接続する方法を示しています。 必要に応じて、
CancellationToken.None
を有効な CancellationToken に置き換えることができます。var response = await mqttClient.ConnectAsync(mqttClientOptions.Build(), CancellationToken.None);
MQTT メッセージは、プロパティを使用して直接作成することも、
MqttApplicationMessageBuilder
を使用して作成することもできます。 このクラスには、さまざまなペイロード形式を処理できるオーバーロードがあります。 ビルダーの API は Fluent API です。 次のコードは、アプリケーション メッセージを作成し、sampletopic という記事に発行する方法を示しています。var applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("sampletopic") .WithPayload("samplepayload" + counter++) .Build(); await mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
ポッド仕様
ポッド構成の serviceAccountName
フィールドは、使用されているトークンに関連付けられているサービス アカウントと一致する必要があります。 また、serviceAccountToken.expirationSeconds
が 86400 秒に設定されていることに注意してください。有効期限が切れると、ディスクからトークンを再読み込みする必要があります。 このロジックは、このサンプルでは実装されていません。
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:
# SAT token used to authenticate between the application and 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"
サンプルを実行するには、その README の指示に従います。