検索

240.7. 使用例

download PDF

240.7.1. Request-Reply とシリアライズされたオブジェクトペイロードを使用する UDP Netty エンドポイント

RouteBuilder builder = new RouteBuilder() {
  public void configure() {
    from("netty:udp://0.0.0.0:5155?sync=true")
      .process(new Processor() {
         public void process(Exchange exchange) throws Exception {
           Poetry poetry = (Poetry) exchange.getIn().getBody();
           poetry.setPoet("Dr. Sarojini Naidu");
           exchange.getOut().setBody(poetry);
         }
       }
    }
};

240.7.2. 一方向通信を使用する TCP ベースの Netty コンシューマーエンドポイント

RouteBuilder builder = new RouteBuilder() {
  public void configure() {
       from("netty:tcp://0.0.0.0:5150")
           .to("mock:result");
  }
};

240.7.3. Request-Reply 通信を使用する SSL/TCP ベースの Netty consumer エンドポイント

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

Camel 2.9 の時点で、Netty コンポーネントは Camel JSSE Configuration Utility を介した SSL/TLS 設定をサポートしています。このユーティリティーは、記述する必要があるコンポーネント固有のコードの量を大幅に削減し、エンドポイントおよびコンポーネントレベルで設定できます。次の例は、Netty コンポーネントでユーティリティーを使用する方法を示しています。

コンポーネントのプログラムによる設定

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);

NettyComponent nettyComponent = getContext().getComponent("netty", NettyComponent.class);
nettyComponent.setSslContextParameters(scp);

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

...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
  </camel:sslContextParameters>...
...
  <to uri="netty:tcp://0.0.0.0:5150?sync=true&ssl=true&sslContextParameters=#sslContextParameters"/>
...

Jetty コンポーネントでの基本的な SSL/TLS 設定の使用

JndiRegistry registry = new JndiRegistry(createJndiContext());
registry.bind("password", "changeit");
registry.bind("ksf", new File("src/test/resources/keystore.jks"));
registry.bind("tsf", new File("src/test/resources/keystore.jks"));

context.createRegistry(registry);
context.addRoutes(new RouteBuilder() {
  public void configure() {
      String netty_ssl_endpoint =
         "netty:tcp://0.0.0.0:5150?sync=true&ssl=true&passphrase=#password"
         + "&keyStoreFile=#ksf&trustStoreFile=#tsf";
      String return_string =
         "When You Go Home, Tell Them Of Us And Say,"
         + "For Your Tomorrow, We Gave Our Today.";

      from(netty_ssl_endpoint)
       .process(new Processor() {
          public void process(Exchange exchange) throws Exception {
            exchange.getOut().setBody(return_string);
          }
       }
  }
});

SSLSession とクライアント証明書へのアクセスを取得する

Camel 2.12 以降で利用可能

たとえば、クライアント証明書に関する詳細を取得する必要がある場合は、javax.net.ssl.SSLSession にアクセスできます。ssl=true の場合、以下に示すように、Netty コンポーネントは SSLSession を Camel メッセージのヘッダーとして保存します。

SSLSession session = exchange.getIn().getHeader(NettyConstants.NETTY_SSL_SESSION, SSLSession.class);
// get the first certificate which is client certificate
javax.security.cert.X509Certificate cert = session.getPeerCertificateChain()[0];
Principal principal = cert.getSubjectDN();

クライアントを認証するには、必ず needClientAuth=true を設定してください。そうしないと、SSLSession はクライアント証明書に関する情報にアクセスできず、例外 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated が発生する可能性があります。クライアント証明書の有効期限が切れているか、有効でない場合などにも、この例外が発生する可能性があります。

ヒント

オプション sslClientCertHeaders をtrue に設定すると、Camel メッセージがクライアント証明書に関する詳細を含むヘッダーで強化されます。たとえば、サブジェクト名はヘッダー CamelNettySSLClientCertSubjectName ですぐに利用できます。

240.7.4. 複数のコーデックの使用

場合によっては、エンコーダーとデコーダーのチェーンを netty パイプラインに追加する必要があります。複数のコーデックを camel netty エンドポイントに追加するには、'encoders' および 'decoders' uri パラメーターを使用する必要があります。encoder および decoder パラメーターと同様に、パイプラインに追加する必要がある (ChannelUpstreamHandlers および ChannelDownstreamHandlers のリストへの) 参照を提供するために使用されます。エンコーダーが指定されている場合、デコーダーとデコーダーのパラメーターと同様に、エンコーダーのパラメーターは無視されることに注意してください。

注記

共有不可能なエンコーダー/デコーダーの使用については、上記をお読みください。

エンドポイントの作成時に解決できるように、コーデックのリストを Camel のレジストリーに追加する必要があります。

Spring のネイティブコレクションサポートを使用して、アプリケーションコンテキストでコーデックリストを指定できます。

Bean 名は、netty エンドポイント定義でコンマ区切りのリストとして使用するか、リストに含めることができます。

または Spring 経由。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.