1 つのクライアントに対して複数のセッションを確立する方法
このガイドでは、1 つのクライアントに対して Event Grid 名前空間への複数のセッションを確立する方法について説明します。
前提条件
- Event Grid 名前空間が作成されている。 名前空間、サブリソースを作成し、トピックに対してパブリッシュ/サブスクライブするには、この「クイック スタート - MQTT トピックでのパブリッシュとサブスクライブ」を参照してください。
マルチセッションのサポート
クライアントごとに複数のセッションを作成するには、CONNECT パケットの Username プロパティにクライアント認証名を指定します。 その後、CONNECT パケットのクライアント識別子 (ClientID) プロパティでセッション ID を指定できます。
- Username プロパティが CONNECT パケットで指定されていない場合、クライアントに対して複数のセッションを作成することはできません。
- ClientID フィールドを空にすることはできません。
- ClientID は、名前空間内のすべてのクライアントで一意である必要があります
クライアントがセッション名を提示して別のクライアントのアクティブなセッションを引き継ごうとすると、その接続要求は未承認エラーで拒否されます。 たとえば、クライアント B が、その時点でクライアント A に割り当てられているセッション 123 に接続しようとすると、クライアント B の接続要求は拒否されます。
セッションを終了せずにクライアントが切断された場合、セッションの有効期限が切れるまで、他のクライアントはそのセッション名を使用できません。 たとえば、クライアント A がセッション名 123 のセッションを作成し、クライアント A が切断された場合、クライアント B は元のセッションの有効期限が切れるまでセッション 123 に接続できません。
CONNECT 構成 MQTT CONNECT パケットで、クライアントの ID を示す Username フィールドにクライアント認証名を含めます。 クライアント認証名が "ipv4=127.0.0.1" のクライアント メタデータの例を次に示します。
これで、クライアントが名前空間に接続されている間、MQTT CONNECT パケットのクライアント識別子フィールドをセッション識別子として使用できます。
たとえば、このクライアント構成に基づいて、同じクライアントからフィールド値を持つ 2 つの CONNECT パケットを送信できます。
MQTTX アプリケーションを使用する接続セットアップのサンプルを確認できます。
最初の接続パケット:
- username: "ipv4=127.0.0.1"
- clientId: "sessionId1"
2 番目の接続パケット:
- username: "ipv4=127.0.0.1"
- clientId: "sessionId2"
同じクライアント証明書資格情報を使用して、両方のセッションを認証できます。