第118章 Netty4


Netty4 コンポーネント

Camel の Netty4 コンポーネントは、Netty プロジェクトバージョン 4 に基づくソケット通信コンポーネントです。Netty は NIO クライアントサーバーフレームワークです。これにより、プロトコルサーバーやクライアントなどの netwServerInitializerFactoryork アプリケーションを迅速かつ簡単に開発できます。Netty4 は、TCP や UDP ソケットサーバーなどのネットワークプログラミングを大幅に簡素化および合理化します。
この Camel コンポーネントは、プロデューサーとコンシューマーエンドポイントの両方をサポートします。
Netty コンポーネントには複数のオプションがあり、多くの TCP/UDP 通信パラメーター(バッファーサイズ、keepAlive、tcpNoDelay など)を詳細に制御し、Camel ルートでの In-Only および In-Out の両方の通信を容易にします。
Maven ユーザーは、このコンポーネントの以下の依存関係を pom.xml に追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-netty4</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください

URI 形式

netty コンポーネントの URI スキームは以下のとおりです。
netty4:tcp://localhost:99999[?options]
netty4:udp://remotehost:99999/[?options]
Copy to Clipboard Toggle word wrap
このコンポーネントは、TCP と UDP の両方のプロデューサーおよびコンシューマーエンドポイントをサポートします。
以下の形式で URI にクエリーオプションを追加できます。 ?option=value&option=value&...

オプション

Expand
名前
デフォルト値
説明
keepAlive
true
非アクティブのためにソケットが閉じられないように設定
tcpNoDelay
true
TCP プロトコルパフォーマンスを改善するための設定
backlog
netty コンシューマー(サーバー)にバックログを設定できます。バックログは、OS に応じてベストエフォートであることに注意してください。このオプションを 200500 または 1000 などの値に設定すると、TCP スタックはaccept キューの長さを指定します。このオプションが設定されていない場合、バックログは OS の設定によって異なります。
broadcast
false
UDP でマルチキャストを選択するための設定
connectTimeout
10000
ソケット接続が利用可能になるまでの待機時間。値はミリ秒単位です。
reuseAddress
true
ソケット多重化を容易にするための設定
sync
true
エンドポイントを一方向または request-response として設定するための設定
synchronous
false
Asynchronous Routing Engine が使用されないかどうか。false 次に、非同期ルーティングエンジン( true )を使用して同期の処理を強制します。
ssl
false
SSL 暗号化をこのエンドポイントに適用するかどうかを指定するための設定
sslClientCertHeaders
false
有効および SSL モードの場合、Netty コンシューマーはサブジェクト名、発行者名、シリアル番号、有効な日付範囲などのクライアント証明書に関する情報で Camel Message を補完します。
sendBufferSize
65536 bytes
アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。
receiveBufferSize
65536 bytes
インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。
option.XXX
null
"option." を接頭辞として使用して、追加の netty オプションを設定できます。たとえば、"option.child.keepAlive=false" は netty オプション "child.keepAlive=false" を設定します。使用可能なオプションについては、Netty のドキュメントを参照してください。
corePoolSize
10
コンポーネントの起動時に割り当てられるスレッドの数。デフォルトは 10 です。注記: このオプションは Camel 2.9.2 以降から削除されます。Netty のデフォルト設定に依存するため、
maxPoolSize
100
このエンドポイントに割り当てることができるスレッドの最大数。デフォルトは 100 です。注記: このオプションは Camel 2.9.2 以降から削除されます。Netty のデフォルト設定に依存するため、
disconnect
false
使用直後に Netty チャネルから切断(閉じる)するかどうか。コンシューマーとプロデューサーの両方に使用できます。
lazyChannelCreation
true
チャネルは、Camel プロデューサーの開始時にリモートサーバーが稼働していない場合に例外を回避するために遅延して作成できます。
transferExchange
false
TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。以下のフィールドは転送されます:ボディー、Out body、Fault ボディー、In headers、Out ヘッダー、Fault ヘッダー、エクスチェンジプロパティー、エクスチェンジ例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。
disconnectOnNoReply
true
sync が有効になっている場合、このオプションは NettyConsumer を指示します。この場合、返信の応答がない場合、このオプションは NettyConsumer を切断します。
noReplyLogLevel
WARN
sync が有効になっている場合、このオプションは NettyConsumer を決定し、送信応答がない場合に使用するロギングレベルを指定します。値: FATAL, ERROR, INFO, DEBUG, OFF
serverExceptionCaughtLogLevel
WARN
サーバー(NettyConsumer)が例外をキャッチする場合、このロギングレベルを使用してログに記録されます。
serverClosedChannelExceptionCaughtLogLevel
DEBUG
サーバー(NettyConsumer)が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クライアントが突然切断され、Netty サーバーで閉じられた例外が発生する可能性があるため、閉じられたチャンネル例外を記録しないようにするために使用されます。
allowDefaultCodec
true
netty コンポーネントは、エンコーダー/ダンダーが null で、テキストラインが false の場合にデフォルトのコーデックをインストールします。allowDefaultCodec を false に設定すると、netty コンポーネントがフィルターチェーンの最初の要素としてデフォルトの codec をインストールできなくなります。
textline
false
TCP にのみ使用されます。codec が指定されていない場合、このフラグを使用してテキスト行ベースのコーデックを示すことができます。指定されていない場合、または値が false の場合、Object Serialization は TCP 経由で想定されます。
delimiter
LINE
テキストラインコーデックに使用する区切り文字。使用できる値は LINE および NULL です。
decoderMaxLineLength
1024
テキストラインコーデックに使用する最大行の長さ。
autoAppendDelimiter
true
テキストラインコーデックを使用して送信する際に、不足している終了区切り文字を自動追加するかどうか。
encoding
null
テキストラインコーデックに使用するエンコーディング(文字セット名)。指定しない場合、Camel は JVM のデフォルト Charset を使用します。
workerCount
null
netty が nio モードで機能する場合、Netty は cpu_core_threads*2 のデフォルトの workerCount パラメーターを使用します。ユーザーはこの操作を使用して Netty からデフォルトの workerCount を上書きできます。
sslContextParameters
null
org.apache.camel.util.jsse.SSLContextParameters インスタンスを使用した SSL 設定。Security Guide および Using the JSSE Configuration Utility の Configuring Transport Security for Camel Components の章 を参照してください。
receiveBufferSizePredictor
null
バッファーサイズ予測を設定します。詳細は Jetty のドキュメント および この メールスレッド を参照してください。
requestTimeout
0
リモートサーバーを呼び出すときに Netty プロデューサーのタイムアウトを使用できます。デフォルトでは、タイムアウトは使用されません。値はミリ秒単位です。requestTimeout は Netty の ReadTimeoutHandler を使用してタイムアウトをトリガーします。Camel 2.16、2.12.1.3: は、CamelNettyRequestTimeout ヘッダーを設定してこの設定を上書きすることもできます。
needClientAuth
false
SSL の使用時にサーバーがクライアント認証を必要とするかどうかを設定します。
usingExecutorService
true
executorService を使用して camel ルート内でメッセージを処理するかどうかは、executorService を NettyComponent から設定できます。
maximumPoolSize
16
順序付けされたスレッドプールが使用されている場合のコアプールサイズ。注記: これは 、Camel 2.15 から 2.14.1 以降 NettyComponent レベルに設定できます
producerPoolEnabled
true
プロデューサーのみ。プロデューサープールが有効かどうか。重要: 同時実行性と信頼できるリクエスト/リプライを処理するのにプーリングが必要になるため、この機能をオフにしないでください。
producerPoolMaxActive
-1
プロデューサーのみ。プールが割り当てることができるオブジェクト数の上限を設定します(クライアントに対してチェックするか、チェックアウトをアイドリングします)。制限なしには負の値を使用してください。
producerPoolMinIdle
0
プロデューサーのみ。エビクタースレッド(アクティブな場合)が新しいオブジェクトを生成する前に、プロデューサープールで許可されるインスタンスの最小数を設定します。
producerPoolMaxIdle
100
プロデューサーのみ。プール内のアイドリングインスタンスの数の上限を設定します。
producerPoolMinEvictableIdle
300000
プロデューサーのみ。アイドルオブジェクトのエビクターによるエビクションの対象となる前に、オブジェクトがプールでアイドル状態にある可能性のある最小時間(ミリ秒単位)を設定します。
bootstrapConfiguration
null
コンシューマーのみ。org.apache.camel.component.netty4.NettyServerBootstrapConfiguration インスタンスを使用して Netty ServerBootstrap オプションを設定できます。これは、複数のコンシューマーで同じ設定を再利用するために使用できます。これにより、設定をより簡単に調整できます。
bossGroup
null
boss スレッドプールとして明示的な io.netty.channel.EventLoopGroup を使用します。たとえば、スレッドプールを複数のコンシューマーと共有するには、以下を実行します。デフォルトでは、各コンシューマーには 1 コアスレッドを持つ独自の boss プールがあります。
workerGroup
null
明示的な io.netty.channel.EventLoopGroup をワーカースレッドプールとして使用するには、以下を実行します。たとえば、スレッドプールを複数のコンシューマーと共有するには、以下を実行します。デフォルトでは、各コンシューマーには 2 x cpu count コアスレッドを持つ独自のワーカープールがあります。
channelGroup null Camel 2.17: 明示的な io.netty.channel.group.ChannelGroupを使用して、メッセージを複数のチャネルに広げるには。
networkInterface
null
コンシューマーのみ。UDP を使用する場合、このオプションを使用して、マルチキャストグループに参加する eth0 などの名前でネットワークインターフェイスを指定できます。
clientInitializerFactory null Camel 2.15: カスタムクライアントイニシャライザーファクトリーを使用して、チャネルのパイプラインを制御します。詳細につていは以下をご覧ください
serverInitializerFactory null Camel 2.15: カスタムサーバーイニシャライザーファクトリーを使用して、チャネルのパイプラインを制御します。詳細につていは以下をご覧ください
clientPipelineFactory null 非推奨: 代わりに clientInitializerFactory を使用してください。
serverPipelineFactory null 非推奨: 代わりに serverInitializerFactory を使用してください。
udpConnectionlessSending false Camel 2.15: プロデューサーのみ。このオプションは、接続なしの UDP 送信をサポートします。これは genuine fire-and-forget です。UDP 送信試行は、PortUnreachableException 例外を受け取ります(受信ポートでリッスンしているものがない場合)。
clientMode false Camel 2.15: コンシューマーのみ。clientModetrue の場合、Netty コンシューマーは TCP クライアントとしてアドレスに接続します。
reconnect true Camel 2.16: コンシューマーのみ。コンシューマーで clientMode でのみ使用され、コンシューマーは切断時に自動的に再接続を試みます。
reconnectInterval 10000 Camel 2.16: コンシューマーのみ。reconnect および clientMode が有効な場合に使用されます。再接続を試行する間隔(ミリ秒単位)。
useByteBuf false Camel 2.16: プロデューサーのみ。useByteBuf true の場合、Netty プロデューサーはメッセージ本文を ByteBuf に変換してから送信してください。
udpByteArrayCodec false Camel 2.16: UDP プロトコルを使用すると、このオプションを true にすると、デフォルトのオブジェクトシリアル化コーデックではなく、バイト配列としてデータが送信されます。
reuseChannel false Camel 2.17: プロデューサーのみ。このオプションを使用すると、プロデューサーはエクスチェンジの処理ライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用する場合に使用できます。これを使用する場合、エクスチェンジが完了するまでチャンネルは接続プールに戻されません。disconnect オプションが true に設定されている場合は切断されます。再利用された Channel は、鍵 NettyConstants#NETTY_CHANNEL を使用してエクスチェンジプロパティーとしてエクスチェンジプロパティーとして保存されます。これにより、ルーティング中にチャネルを取得して使用することができます。

レジストリーベースのオプション

Codec ハンドラーおよび SSL キーストアは、Spring XML ファイルの など、レジストリー に登録できます。渡すことができる値は次のとおりです。
Expand
名前
説明
passphrase
SSH を使用して送信されたペイロードの暗号化/復号化に使用するパスワード設定
keyStoreFormat
ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトは JKS です。
securityProvider
ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。
keyStoreFile
非推奨: 暗号化に使用されるクライアント側の証明書キーストア
trustStoreFile
非推奨: 暗号化に使用されるサーバー側の証明書キーストア
keyStoreResource
Camel 2.11.1: 暗号化に使用されるクライアント側の証明書キーストア。はクラスパスからデフォルトでロードされますが、別のシステムからリソースを読み込むには、"classpath:""file:"、または "http:" の接頭辞を付けることができます。
trustStoreResource
Camel 2.11.1: 暗号化に使用されるサーバー側の証明書キーストア。はクラスパスからデフォルトでロードされますが、別のシステムからリソースを読み込むには、"classpath:""file:"、または "http:" の接頭辞を付けることができます。
sslHandler
SSL ハンドラーを返すために使用できるクラスへの参照
encoder
アウトバウンドペイロードの特別なマーシャリングを実行するために使用できるカスタム ChannelHandler クラス。io.netty.channel.ChannelInboundHandlerAdapter を上書きする必要があります。
encoders
使用するエンコーダーのリスト。コンマ区切りの値を持つ文字列を使用し、値をレジストリー で検索でき ます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。
decoder
インバウンドペイロードの特別なマーシャリングを実行するために使用できるカスタム ChannelHandler クラス。io.netty.channel.ChannelOutboundHandlerAdapter を上書きする必要があります。
decoders
使用するデコーダーのリスト。コンマ区切りの値を持つ文字列を使用し、値をレジストリー で検索でき ます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。
重要: 共有不可能なエンコーダー/デコーダーの使用について以下をお読みください。

共有不可能なエンコーダーまたはデコーダーの使用

エンコーダーまたはデコーダーが共有できない場合(たとえば、@Shareable クラスアノテーションがある場合)、エンコーダー/デコーダーは org.apache.camel.component.netty.ChannelHandlerFactory インターフェイスを実装し、newChannelHandler メソッドで新規インスタンスを返します。これにより、エンコーダー/デコーダーを安全に使用できるようになります。そうでない場合、Netty コンポーネントはエンドポイントの作成時に WARN をログに記録します。
Netty コンポーネントは、org.apache.camel.component.netty.ChannelHandlerFactories ファクトリークラスを提供します。このクラスには、一般的に使用されるメソッドが多数あります。

Netty エンドポイントとの間でメッセージを送信する

Netty プロデューサー

Producer モードでは、コンポーネントは TCP または UDP プロトコル(オプションの SSL サポートあり)を使用して、ソケットエンドポイントにペイロードを送信する機能を提供します。
プロデューサーモードは、一方向および要求応答ベースの操作の両方をサポートします。

Netty コンシューマー

Consumer モードでは、コンポーネントは以下を行う機能を提供します。
  • TCP または UDP プロトコル(任意の SSL サポートあり)を使用して、指定したソケットでリッスンします。
  • text/xml、バイナリー、およびシリアライズされたオブジェクトベースのペイロードを使用して、ソケットで要求を受信します。
  • それらをメッセージ交換としてルートに送信します。
コンシューマーモードは、一方向および要求応答ベースの操作の両方をサポートします。

使用例

RouteBuilder builder = new RouteBuilder() {
  public void configure() {
    from("netty4:udp://localhost: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);
         }
       }
    }
};
Copy to Clipboard Toggle word wrap

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

RouteBuilder builder = new RouteBuilder() {
  public void configure() {
       from("netty4:tcp://localhost:5150")
           .to("mock:result");
  }
};
Copy to Clipboard Toggle word wrap

複数のコーデックの使用

特定のケースでは、エンコーダーとデコーダーのチェーンを netty パイプラインに追加する必要がある場合があります。multpile codecs を camel netty エンドポイントに追加するには、encoders およびdecoders URI パラメーターを使用する必要があります。encoder パラメーターおよびdecoder パラメーターと同様に、パイプラインに追加する必要のある ChannelUpstreamHandlers および ChannelDownstreamHandlers のリストへの参照を提供するために使用されます。エンコーダーを指定すると、デコーダーやデコーダーパラメーターと同様にエンコーダーパラメーターが無視されます。
重要
共有不可能なエンコーダー/デコーダーの使用について、上記を参照してください。
エンドポイントの作成時に解決できるように、コーデックのリストを Camel のレジストリーに追加する必要があります。
ChannelHandlerFactory lengthDecoder = ChannelHandlerFactories.newLengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4);
 
StringDecoder stringDecoder = new StringDecoder();
registry.bind("length-decoder", lengthDecoder);
registry.bind("string-decoder", stringDecoder);
 
LengthFieldPrepender lengthEncoder = new LengthFieldPrepender(4);
StringEncoder stringEncoder = new StringEncoder();
registry.bind("length-encoder", lengthEncoder);
registry.bind("string-encoder", stringEncoder);
 
List<ChannelHandler> decoders = new ArrayList<ChannelHandler>();
decoders.add(lengthDecoder);
decoders.add(stringDecoder);
 
List<ChannelHandler> encoders = new ArrayList<ChannelHandler>();
encoders.add(lengthEncoder);
encoders.add(stringEncoder);
 
registry.bind("encoders", encoders);
registry.bind("decoders", decoders);

Copy to Clipboard Toggle word wrap
Spring のネイティブコレクションサポートを使用して、アプリケーションコンテキストでコーデックリストを指定できます。
   
<util:list id="decoders" list-class="java.util.LinkedList">
        <bean class="org.apache.camel.component.netty4.ChannelHandlerFactories" factory-method="newLengthFieldBasedFrameDecoder">
            <constructor-arg value="1048576"/>
            <constructor-arg value="0"/>
            <constructor-arg value="4"/>
            <constructor-arg value="0"/>
            <constructor-arg value="4"/>
        </bean>
        <bean class="io.netty.handler.codec.string.StringDecoder"/>
    </util:list>

    <util:list id="encoders" list-class="java.util.LinkedList">
        <bean class="io.netty.handler.codec.LengthFieldPrepender">
            <constructor-arg value="4"/>
        </bean>
        <bean class="io.netty.handler.codec.string.StringEncoder"/>
    </util:list>

    <bean id="length-encoder" class="io.netty.handler.codec.LengthFieldPrepender">
        <constructor-arg value="4"/>
    </bean>
    <bean id="string-encoder" class="io.netty.handler.codec.string.StringEncoder"/>

    <bean id="length-decoder" class="org.apache.camel.component.netty4.ChannelHandlerFactories" factory-method="newLengthFieldBasedFrameDecoder">
        <constructor-arg value="1048576"/>
        <constructor-arg value="0"/>
        <constructor-arg value="4"/>
        <constructor-arg value="0"/>
        <constructor-arg value="4"/>
    </bean>
    <bean id="string-decoder" class="io.netty.handler.codec.string.StringDecoder"/>
Copy to Clipboard Toggle word wrap
Bean 名は、コンマ区切りリストとして、または List に含めるか、netty エンドポイント定義で使用できます。
 from("direct:multiple-codec").to("netty4:tcp://localhost:{{port}}?encoders=#encoders&sync=false");
                
 from("netty4:tcp://localhost:{{port}}?decoders=#length-decoder,#string-decoder&sync=false").to("mock:multiple-codec");
Copy to Clipboard Toggle word wrap
または spring を使用します。
   <camelContext id="multiple-netty-codecs-context" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="direct:multiple-codec"/>
            <to uri="netty4:tcp://localhost:5150?encoders=#encoders&amp;sync=false"/>
        </route>
        <route>
            <from uri="netty4:tcp://localhost:5150?decoders=#length-decoder,#string-decoder&amp;sync=false"/>
            <to uri="mock:multiple-codec"/>
        </route>
    </camelContext>
Copy to Clipboard Toggle word wrap

完了したらチャンネルを閉じる

サーバーとして動作する場合は、クライアントの変換が終了する場合などにチャネルを閉じることがあります。これは、エンドポイントのオプション disconnect=true を設定するだけで実行できます。
ただし、以下のようにメッセージごとに Camel に指示することもできます。Camel に対してチャネルを閉じるよう指示するには、CamelNettyCloseChannelWhenComplete キーが true のヘッダーをブール値 値に追加する必要があります。たとえば、以下の例では、bye メッセージをクライアントに書き戻した後にチャンネルを閉じます。
        from("netty4:tcp://localhost:8080").process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                String body = exchange.getIn().getBody(String.class);
                exchange.getOut().setBody("Bye " + body);
                // some condition which determines if we should close
                if (close) {
                    exchange.getOut().setHeader(NettyConstants.NETTY_CLOSE_CHANNEL_WHEN_COMPLETE, true);
                }
            }
        });
Copy to Clipboard Toggle word wrap
カスタムチャネルパイプラインは、カスタムハンドラーを挿入してハンドラー/インターセプターチェーンを完全に制御します。これは、Netty Endpoint URL で指定しなくても、エンコーダーとデコーダーを簡単に指定します。
カスタムパイプラインを追加するには、カスタムチャネルパイプラインファクトリーを作成し、コンテキストレジストリー(JNDIRegistry、または camel-spring ApplicationContextRegistry など)でコンテキストに登録する必要があります。
カスタムパイプラインファクトリーは以下のように構築する必要があります。
  • Producer リンクされたチャネルパイプラインファクトリーは、抽象クラス ClientInitializerFactory を拡張する必要があります。
  • Consumer linked チャネルパイプラインファクトリーは、抽象クラス ServerInitializerFactory を拡張する必要があります。
  • クラスは、initChannel() メソッドをオーバーライドして、カスタムハンドラー、エンコーダー、およびデコーダーを挿入する必要があります。initChannel() メソッドをオーバーライドしない場合は、ハンドラー、エンコーダー、またはデコーダーがないパイプラインを作成し、パイプラインにワイヤリングします。
以下の例は、ServerInitializerFactory ファクトリーを作成する方法を示しています。

例118.1 サーバーイニシャライザーファクトリーの使用

public class SampleServerInitializerFactory extends ServerInitializerFactory {
    private int maxLineSize = 1024;
 
     protected void initChannel(Channel ch) throws Exception {
        ChannelPipeline channelPipeline = ch.pipeline();
 
        channelPipeline.addLast("encoder-SD", new StringEncoder(CharsetUtil.UTF_8));
        channelPipeline.addLast("decoder-DELIM", new DelimiterBasedFrameDecoder(maxLineSize, true, Delimiters.lineDelimiter()));
        channelPipeline.addLast("decoder-SD", new StringDecoder(CharsetUtil.UTF_8));
        // here we add the default Camel ServerChannelHandler for the consumer, to allow Camel to route the message etc.
        channelPipeline.addLast("handler", new ServerChannelHandler(consumer));
    }
}
Copy to Clipboard Toggle word wrap
カスタムサーバーイニシャライザーファクトリーをレジストリーに追加し、以下のように Camel ルートでインスタンス化/活用できます。
Registry registry = camelContext.getRegistry();
ServerInitializerFactory factory = new TestServerInitializerFactory();
registry.bind("spf", factory);
context.addRoutes(new RouteBuilder() {
  public void configure() {
      String netty_ssl_endpoint =
         "netty4:tcp://localhost:5150?serverInitializerFactory=#spf"
      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);
          }
       }
  }
});
Copy to Clipboard Toggle word wrap

Netty boss およびワーカースレッドプールの再利用

Camel 2.12 以降で利用可能
Netty には boss と worker の 2 種類のスレッドプールがあります。デフォルトでは、各 Netty コンシューマーおよびプロデューサーにはプライベートスレッドプールがあります。複数のコンシューマーまたはプロデューサー間でこれらのスレッドプールを再利用する場合は、スレッドプールを作成し、レジストリー に登録する必要があり ます
たとえば、Spring XML を使用する場合は、以下のように 2 つのワーカースレッドを持つ NettyWorkerPoolBuilder を使用して共有ワーカースレッドプールを作成できます。
  <!-- use the worker pool builder to create to help create the shared thread pool -->
  <bean id="poolBuilder" class="org.apache.camel.component.netty.NettyWorkerPoolBuilder">
    <property name="workerCount" value="2"/>
  </bean>

  <!-- the shared worker thread pool -->
  <bean id="sharedPool" class="org.jboss.netty.channel.socket.nio.WorkerPool"
        factory-bean="poolBuilder" factory-method="build" destroy-method="shutdown">
  </bean>
Copy to Clipboard Toggle word wrap
ヒント
boss スレッドプールの場合、Netty コンシューマーの org.apache.camel.component.netty4.NettyServerBossPoolBuilder ビルダーがあり、Netty が生成する org.apache.camel.component.netty4.NettyClientBossPoolBuilder があります。
Camel ルートでは、以下のように URI で workerPool オプションを設定することで、このワーカープールを参照できます。
    <route>
      <from uri="netty4:tcp://localhost:5021?textline=true&amp;sync=true&amp;workerPool=#sharedPool&amp;usingExecutorService=false"/>
      <to uri="log:result"/>
      ...
    </route>
Copy to Clipboard Toggle word wrap
別のルートがある場合は、共有ワーカープールを参照できます。
    <route>
      <from uri="netty4:tcp://localhost:5022?textline=true&amp;sync=true&amp;workerPool=#sharedPool&amp;usingExecutorService=false"/>
      <to uri="log:result"/>
      ...
    </route>
Copy to Clipboard Toggle word wrap
... など。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat