WebSockets 管理グループ - Mule 4

WebSockets Connector が使用するソケットグループは、WebSockets クライアントが必要に応じてサブスクライブできる文字列 ID です。これは、いわゆるメッセージ分離に便利です。メッセージ分離により、アプリケーションで単一のメッセージを異なる WebSockets クライアントのグループにブロードキャストできます。

グループを利用する方法の例は、ブロードキャスト操作のドキュメントに記載されています。

<websocket:inbound-listener>​ トリガーと ​<websocket:open-outbound-socket>​ 操作の両方で、デフォルトのグループを指定できます。これは、新規のインバウンドおよびアウトバウンドソケットがすべて自動的にサブスクライブされるグループです。

手動でのサブスクライブまたはグループからのソケットのサブスクライブ解除が必要になるユースケースもあります。たとえば、インバウンド WebSocket が確立されるマルチテナントアプリケーションのユースケースを考えてみましょう。イニシエーターの HTTP 要求には ​clientId​ と呼ばれる認証ヘッダーが含まれます。クライアント ID を検証して、クライアントが属する組織を識別する ​orgId​ と呼ばれる変数を設定する ​fetch-client-details​ と呼ばれるフローをコールします。ソケットがその組織を識別するグループに追加されます。

(組織 ID) にサブスクライブされるグループはランタイムにしか決定できないため、グループサブスクリプションは動的です。

フローの例を次に示します。

<flow name="onIncomingMessageFlow">
    <websocket:inbound-listener path="/feed" config-ref="ws" />

    <!-- Store relevant information in variables -->
    <set-variable variableName="socketId" value="#[attributes.socketId]" />
    <set-variable variableName="authHeader" value="#[attributes.headers.clientId]" />

    <!-- Validate the auth Header -->
    <flow-ref name="fetch-client-details" />

    <!-- Perform group subscription -->
    <websocket:subscribe-groups
      socketId="#[vars.socketId]"
      groups="#[[vars.orgId]]"
      config-ref="ws" />
</flow>
xml

このユースケースの裏側として、グループから動的にサブスクライブ解除する必要もあり、これは ​<websocket:unsubscribe-groups>​ 操作を使用して実行できます。

<websocket:unsubscribe-groups
  socketId="#[vars.socketId]"
  groups="#[[vars.orgId]]"
  config-ref="ws" />
xml