第184章 Websocket


WebSocket コンポーネント

Camel 2.10 以降で利用可能
Websocket コンポーネントは、Websocket を使用してクライアントと通信するための WebSocket エンドポイント を提供します。コンポーネントは Eclipse Jetty Server を使用します。これは、IETF 仕様(ドラフトおよび RFC 6455)を実装します。ws:// および wss:// のプロトコルをサポートします。wss:// プロトコルを使用するには、SSLContextParameters オブジェクトを定義する必要があります。
現在サポートされているバージョン
Camel 2.10 は Jetty 7.5.4.v20111024 を使用するため、D00 から D13 IETF 実装のみを利用できます。Camel 2.11 は Jetty 7.6.7 を使用します。

URI 形式

websocket://hostname[:port][/resourceUri][?options]
Copy to Clipboard Toggle word wrap
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

コンポーネントオプション

ホストを WebSocket サーバーとして機能するように設定するには、使用する前に websocket コンポーネントを設定できます。
Expand
オプション デフォルト 説明
host 0.0.0.0 ホスト名。
port 9292 ポート番号。
staticResources null index.html ファイルなどの静的リソースのパス。このオプションが設定された場合、サーバーは指定されたホスト名とポートで起動し、index.html ファイルなどの静的リソースを処理します。このオプションが設定されていない場合、サーバーは起動されません。
sslContextParameters レジストリー の org.apache.camel.util.jsse.SSLContextParameters オブジェクトへの 参照。 この参照は、コンポーネントレベルで設定された SSLContextParameters を上書きします。Security Guide および Using the JSSE Configuration Utility の Configuring Transport Security for Camel Components の章 を参照してください。
enableJmx false このオプションが true の場合、このエンドポイントに対して Jetty JMX サポートが有効になります。
sslKeyPassword null コンシューマーのみ: SSL 使用時のキーストアのパスワード。
sslPassword null コンシューマーのみ: SSL を使用する場合のパスワード。
sslKeystore null コンシューマーのみ: キーストアへのパス。
minThreads null コンシューマーのみ: サーバースレッドプールでスレッドの最小数の値を設定するには、以下を実行します。
maxThreads null コンシューマーのみ: サーバースレッドプールの最大スレッド数に値を設定します。
threadPool null コンシューマーのみ: サーバーにカスタムスレッドプールを使用します。

エンドポイントオプション

WebsocketEndpoint は、使用前に設定できます。
Expand
オプション デフォルト 説明
sslContextParametersRef 非推奨および は Camel 3.0: Registryorg.apache.camel.util.jsse.SSLContextParameters への参照で削除され ます。 この参照は、コンポーネントレベルで設定済みの SSLContextParameters を上書きします。Using the JSSE Configuration Utility を参照してください。代わりに sslContextParameters オプションを使用してください。
sslContextParameters Camel 2.11.1: レジストリー の org.apache.camel.util.jsse.SSLContextParameters への 参照。この参照は、コンポーネントレベルで設定済みの SSLContextParameters を上書きします。Security Guide および Using the JSSE Configuration Utility の Configuring Transport Security for Camel Components の章 を参照してください。
sendToAll null プロデューサーのみ: すべての WebSocket サブスクライバーに送信する。メッセージで WebsocketConstants.SEND_TO_ALL ヘッダーを使用する代わりに、エンドポイントレベルで を設定できます。
staticResources null Web リソースまたはクラスパスのルートディレクトリー。コンポーネントがファイルシステムまたはクラスパスからリソースを読み込むかどうかに応じて、プロトコル file: または classpath: を使用します。
sslContextParameters
レジストリー の org.apache.camel.util.jsse.SSLContextParameters オブジェクトへの 参照。この参照は、コンポーネントレベルで設定済みの SSLContextParameters を上書きします。Security Guide および Using the JSSE Configuration Utility の Configuring Transport Security for Camel Components の章 を参照してください。
enableJmx
false
このオプションが true の場合、このエンドポイントに対して Jetty JMX サポートが有効になります。詳細は Jetty JMX support を参照してください。
sslKeyPassword
null
コンシューマーのみ: SSL 使用時のキーストアのパスワード。
sslPassword
null
コンシューマーのみ: SSL を使用する場合のパスワード。
sslKeystore
null
コンシューマーのみ: キーストアへのパス。
minThreads
null
コンシューマーのみ: サーバースレッドプールでスレッドの最小数の値を設定するには、以下を実行します。
maxThreads
null
コンシューマーのみ: サーバースレッドプールの最大スレッド数に値を設定します。
threadPool
null
コンシューマーのみ: サーバーにカスタムスレッドプールを使用します。

メッセージヘッダー

WebSocket コンポーネントは 2 つのヘッダーを使用して、メッセージを単一/現在のクライアント、またはすべてのクライアントに送信することを示します。
Expand
キー 説明
WebsocketConstants.SEND_TO_ALL 現在接続しているすべてのクライアントにメッセージを送信します。このヘッダーを使用する代わりに、エンドポイントで sendToAll オプションを使用できます。
WebsocketConstants.CONNECTION_KEY 指定の接続キーを使用してクライアントにメッセージを送信します。

使用方法

この例では、Camel はクライアントが通信できる WebSocket サーバーを公開します。Websocket サーバーは、0.0.0.0:9292 というデフォルトのホストおよびポートを使用します。この例では、入力の echo を送り返します。メッセージを送信するには、変換されたメッセージを同じエンドポイント "websocket://echo" に送信する必要があります。メッセージングのデフォルトは InOnly であるため、この設定が必要です。
// expose a echo websocket client, that sends back an echo
from("websocket://echo")
    .log(">>> Message received from WebSocket Client : ${body}")
    .transform().simple("${body}${body}")
    // send back to the client, by sending the message to the same endpoint
    // this is needed as by default messages is InOnly
    // and we will by default send back to the current client using the provided connection key
    .to("websocket://echo");
Copy to Clipboard Toggle word wrap
この例はユニットテストの一部で、ここでは を参照してください。クライアントとして、Web ソケットのサポートを提供する AHC ライブラリーを使用します。
さらに、webapp リソースの場所が定義され、Jetty Application Server が WebSocket サーブレットを登録するだけでなく、ブラウザーの Web リソースも公開できるように定義されています。リソースは webapp ディレクトリーの下に定義する必要があります。
from("activemq:topic:newsTopic")
   .routeId("fromJMStoWebSocket")
   .to("websocket://localhost:8443/newsTopic?sendToAll=true&staticResources=classpath:webapp");
Copy to Clipboard Toggle word wrap

Webocket コンポーネントの SSL の設定

JSSE 設定ユーティリティーの使用

Camel 2.10 の時点で、Websocket コンポーネントは Using the JSSE Configuration Utility を通じて SSL/TLS 設定をサポートします。このユーティリティーは、作成する必要のあるコンポーネント固有のコードの量を大幅に減らし、エンドポイントおよびコンポーネントレベルで設定可能です。 以下の例は、エンドポイントの設定方法を示しています。> Security Guide の Configuring Transport Security for Camel Components の章を参照してください

エンドポイントの Spring DSL ベースの設定

...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
    <camel:trustManagers>
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:trustManagers>
  </camel:sslContextParameters>...
...
  <to uri="websocket://127.0.0.1:8443/test?sslContextParameters=#sslContextParameters"/>...
Copy to Clipboard Toggle word wrap

エンドポイントの Java DSL ベースの設定

...
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() {

                String uri = "websocket://127.0.0.1:8443/test?sslContextParameters=#sslContextParameters";

                from(uri)
                     .log(">>> Message received from WebSocket Client : ${body}")
                     .to("mock:client")
                     .loop(10)
                         .setBody().constant(">> Welcome on board!")
                         .to(uri);
...
Copy to Clipboard Toggle word wrap
  • AHC
  • Twitter Websocket Example では、twitter 検索の定数フィードをポーリングし、Web ソケットを使用して結果を Web ページにリアルタイムで公開する方法を実証します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat