WebSockets Connector の例 - Mule 4

次の Mule アプリケーションの例では、WebSockets 用 Anypoint Connector (WebSockets Connector) を使用して、株価情報を取得してブロードキャストするインテグレーションシステムを構築できます。

Quote Producer App

次の Mule アプリケーションは、継続的でランダムな株価情報を生成します。

Anypoint Studio キャンバスの Quote Producer App フロー
  1. 株価情報の例:

{
   "ticker": "CRM",
   "price": 157.6,
   "cur": "USD",
  "timestamp": 1563374475104
}
  • Quote​ 種別で前述の株価情報の例を識別します。

  • Mule アプリケーションは、少なくとも 5 つの異なるティッカー (CRM、MELI、GOOG、NFLX、AAPL) を使用するランダムな株価を使用して約 50 件の見積を生成します。

  • また、1 つの接続のみを受け入れる TLS セキュア ​wss://localhost:60000/feed​ エンドポイントを公開します。

  • 最初のクライアントはエンドポイントに正常に接続する必要があります。

  • エンドポイントに接続する以降のクライアントには、「​"Sorry, spot taken"​ (申し訳ありません。スポットは取得済みです)」というテキストが含まれる WSS メッセージが送信されます。

  • 生成された各見積もりが接続されたフィードクライアントに送信されます。

対応するキーストアを生成する手順は、次のとおりです。

  1. ターミナルを開きます。

  2. ターミナルで、Studio のプロジェクトアプリケーションの ​src/main/resources​ フォルダーに移動します。

  3. 次のコマンドを実行します。

    keytool -genkey -v -keystore producer-keystore.jks -alias producerkey -keyalg RSA -keysize 2048 -validity 10000

Quote Producer App の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

Quote Aggregator App

次の Mule アプリケーションは、前の Quote Producer App のフィードエンドポイントに接続し、すべての見積を受信します。次の、Quote Producer App はティッカー別に見積を分割し、5 秒ごとに実行される時間ベースのアグリゲーターに配置します。

Anypoint Studio キャンバスの Quote Aggregator App フロー

集計が実行されると、アグリゲーターは縮小される ​Array<Quote>​ を単一の ​QuoteSnapshot​ 種別に出力します。

QuoteSnapshot 種別の例
{
   "ticker": "CRM"
   "price": "157.54 USD"
}
json
  • 縮小は、タイムスタンプが最大の ​Quote​ を選択して変換することで実行されます。

  • 生成されたスナップショットはサブスクライバーの動的リストにブロードキャストされます。

  • サブスクリプションは、Quote Aggregator App が公開する ​wss://localhost:8082/quotes​ エンドポイントを通じて実行されます。

  • クライアントはどの株価情報に従うかを示すクエリパラメーターを使用して前のエンドポイントに接続できます (例: wss://localhost:8082/quotes?ticker=CRM&ticker=MELI​)。

対応するキーストアとトラストストアを生成する手順は、次のとおりです。

  1. ターミナルを開きます。

  2. ターミナルで、Studio のプロジェクトアプリケーションの ​src/main/resources​ フォルダーに移動します。

  3. キーストアの次のコマンドを実行します。

    keytool -genkey -v -keystore broadcast-keystore.jks -alias broadcast -keyalg RSA -keysize 2048 -validity 10000

  4. 次のコマンドを実行してトラストストアを生成します。

    keytool -genkey -v -keystore aggregator-truststore.jks -alias broadcast -keyalg RSA -keysize 2048 -validity 10000

要求によって、​CRM​ および ​MELI​ ティッカーのスナップショットを取得する WebSocket が確立されます。これは、生成されたソケットを適切なソケットグループにサブスクライブすることで実行されます。

Quote Aggregator App を Quote Producer App に接続するには、次のコマンドを使用して、アウトバウンドソケットを開くフローをトリガーします。

Quote Aggregator App の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

Quote Client App

次の Mule アプリケーションによって少なくとも 3 つの異なる WebSockets が Quote Aggregator App の見積エンドポイントに開かれます。こうした各ソケットは異なるセットのティッカーをリスンします。

Anypoint Studio キャンバスの Quote Client App フロー
Figure 1. Quote Client App フロー

受信された ​QuoteSnapshots​ は CSV 形式に変換され、ファイルに付加されます。

対応するキーストアを生成する手順は、次のとおりです。

  1. ターミナルを開きます。

  2. ターミナルで、Studio のプロジェクトアプリケーションの ​src/main/resources​ フォルダーに移動します。

  3. 次のコマンドを実行します。

    keytool -genkey -v -keystore client-truststore.jks -alias client -keyalg RSA -keysize 2048 -validity 10000

Quote Client App を Quote Aggregator App に接続するには、次のコマンドを使用して、アウトバウンドソケットを開くフローをトリガーします。

Quote Client App の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。