Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第105章 MINA2 - 非推奨
MINA 2 コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
非推奨
MINA2 コンポーネントは非推奨になりました。代わりに Netty を使用してください。
注記
コンシューマーエンドポイントでは、
sync=false
に注意してください。camel-mina2 以降、すべてのコンシューマーエクスチェンジは InOut です。これは camel-mina とは異なります。
Camel 2.10 以降で利用可能
mina2: コンポーネントは Apache MINA 2.xを使用するためのトランスポートです。
Maven ユーザーは、このコンポーネントの
pom.xml
に以下の依存関係を追加する必要があります。
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 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
mina2:tcp://hostname[:port][?options] mina2:udp://hostname[:port][?options] mina2:vm://hostname[:port][?options]
mina2:tcp://hostname[:port][?options]
mina2:udp://hostname[:port][?options]
mina2:vm://hostname[:port][?options]
codec オプションを使用して、レジストリーに codec を指定できます。TCP を使用し、codec を指定しない場合は、
テキスト行
ベースのコーデックまたはオブジェクトシリアル化を代わりに使用する必要があるかどうかを判断するためにテキストラインフラグが使用されます。デフォルトでは、オブジェクトのシリアライズが使用されます。
codec が指定されていない場合、UDP の場合、デフォルトは基本的な
ByteBuffer
ベースのコーデックを使用します。
仮想マシンプロトコルは、同じ JVM の直接転送メカニズムとして使用されます。
Mina プロデューサーのデフォルトのタイムアウト値は 30 秒で、リモートサーバーからの応答を待ちます。
通常の使用では、
camel-mina
はボディー content-essage ヘッダーとエクスチェンジプロパティーは送信されません。ただし、オプション transferExchange を使用すると、エクスチェンジ自体をネットワーク経由で転送できます。以下のオプションを参照してください。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
オプション | デフォルト値 | 説明 |
---|---|---|
codec
|
null
|
Spring ApplicationContext などの名前付きの ProtocolCodecFactory インスタンスをレジストリーで参照できます。これはマーシャリングに使用されます。
|
disconnect
|
false
|
使用直後に Mina セッションから切断するかどうか。コンシューマーとプロデューサーの両方に使用できます。 |
textline
|
false
|
TCP にのみ使用されます。codec が指定されていない場合、このフラグを使用してテキスト行ベースのコーデックを示すことができます。指定されていない場合、または値が false の場合、Object Serialization は TCP 経由で想定されます。
|
textlineDelimiter
|
DEFAULT
|
TCP および textline=true にのみ使用されます。使用するテキスト行区切り文字を設定します。使用できる値は、DEFAULT 、AUTO 、WINDOWS 、UNIX または MAC です。指定がない場合は、Camel は DEFAULT を使用します。この区切り文字は、テキストの最後をマークするために使用されます。
|
sync
|
true
|
endpoint を one-way または request-response として設定するための設定。 |
lazySessionCreation
|
true
|
Camel プロデューサーの開始時にリモートサーバーが稼働していない場合、セッションは遅延して例外を回避するために作成できます。 |
timeout
|
30000
|
リモートサーバーからの応答を待つ時間を指定するタイムアウトを設定できます。タイムアウト単位はミリ秒単位であるため、60000 は 60 秒です。タイムアウトは Mina プロデューサーにのみ使用されます。 |
encoding
|
JVM のデフォルト | TCP テキストラインコーデックおよび UDP プロトコルに使用するようにエンコーディング( charset 名)を設定できます。指定しない場合、Camel は JVM のデフォルト Charset を 使用します。 |
transferExchange
|
false
|
TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。以下のフィールドは転送されます:ボディー、Out body、Fault ボディー、In headers、Out ヘッダー、Fault ヘッダー、エクスチェンジプロパティー、エクスチェンジ例外。これには、オブジェクトが シリアライズ可能 である必要があります。Camel はシリアライズできないオブジェクトを除外し、WARN レベルでログに記録します。
|
minaLogger
|
false
|
Apache MINA ロギングフィルターを有効にできます。Apache MINA は、INFO レベルで slf4j ロギングを使用して、すべての入出力をログに記録します。
|
filters
|
null
|
Mina IoFilters のリストを設定して登録できます。フィルター は Bean 参照のコンマ区切りリストとして指定できます(例: \#filterBean1,#filterBean2)。各 Bean のタイプは org.apache.mina.common.IoFilter である必要があります。
|
encoderMaxLineLength
|
\-1
|
テキストプロトコルエンコーダーの最大行の長さを設定します。デフォルトでは、Mina 自体のデフォルト値が使用されます。これは Integer.MAX_VALUE です。
|
decoderMaxLineLength
|
\-1
|
テキストラインプロトコルデコーダーの最大行の長さを設定します。デフォルトでは、Mina itself のデフォルト値が使用されます。これは 1024 です。 |
maximumPoolSize
|
16 | TCP プロデューサーはスレッドセーフであり、同時実行性をはるかに向上します。このオプションを使用すると、同時プロデューサーのスレッドプールにスレッド数を設定できます。注記: Camel にはプールされたサービスがあり、すでにスレッドセーフであり、サポートされる同時実行性が保証されています。 |
allowDefaultCodec
|
true
|
mina コンポーネントは、両方が null の場合、codec が null で、テキストライン が false の場合にデフォルトの コーデック をインストールします。allowDefaultCodec を false に設定すると、mina コンポーネントがフィルターチェーンの最初の要素としてデフォルトのコーデックをインストールできなくなります。これは、SSL フィルターなど、フィルターチェーンの最初のフィルターを設定する必要があるシナリオで役立ちます。
|
disconnectOnNoReply
|
true
|
sync が有効になっている場合、返答がない場所で切断される必要がある場合は、このオプションは MinaConsumer を指示します。 |
noReplyLogLevel
|
WARN
|
sync が有効になっている場合、このオプションは MinaConsumer を決定し、送信する応答がない場合に使用するログレベルを指定します。値は FATAL、ERROR、INFO、DEBUG、OFF です。
|
orderedThreadPoolExecutor
|
true
|
順序付けられたスレッドプールを使用して、イベントが同じチャネルで順番に処理されるかどうか。 |
sslContextParameters
|
null
|
org.apache.camel.util.jsse.SSLContextParameters インスタンスを使用した SSL 設定。Using the JSSE Configuration Utility を参照してください。
|
autoStartTls
|
true
|
SSL ハンドシェイクを自動起動するかどうか。 |
cachedAddress
|
true
|
Camel 2.14: InetAddress を一度作成して再利用するかどうか。これを false に設定すると、ネットワークで DNS の変更を取得できます。 |
clientMode
|
false
|
Camel 2.15: コンシューマーのみ。clientMode が true の場合、mina コンシューマーはアドレスを TCP クライアントとして接続します。 |
カスタムコーデックの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Mina how to write your own codec を参照してください。
camel-mina
でカスタムコーデックを使用するには、Spring XML ファイルに Bean を作成するなどして、codec をレジストリーに登録する必要があります。次に、codec
オプションを使用してコーデックの Bean ID を指定します。カスタムコーデックを持つ HL7 を参照してください。
sync=false を使用した例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
この例では、Camel はポート 6200 で TCP 接続をリッスンするサービスを公開します。テキストライン コーデックを使用します。ルートでは、ポート 6200 をリッスンする Mina コンシューマーエンドポイントを作成します。
from("mina2:tcp://localhost:" + port1 + "?textline=true&sync=false").to("mock:result");
from("mina2:tcp://localhost:" + port1 + "?textline=true&sync=false").to("mock:result");
サンプルはユニットテストの一部であるため、ポート 6200 で一部のデータを送信することでテストします。
sync=true の例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
次のサンプルでは、ポート 6201 で TCP サービスを公開する一般的なユースケースも、テキストコーデックを使用します。ただし、今回は応答を返すため、コンシューマーで
sync
オプションを true
に設定します。
次に、
template.requestBody ()
メソッドを使用してデータを送信し、応答を取得し、サンプルをテストします。応答が String であることが分かっているため、 String
にキャストし、応答がプロセッサーコードロジックで動的に設定されているものであることをアサートできます。
String response = (String)template.requestBody("mina2:tcp://localhost:" + port2 + "?textline=true&sync=true", "World"); assertEquals("Bye World", response);
String response = (String)template.requestBody("mina2:tcp://localhost:" + port2 + "?textline=true&sync=true", "World");
assertEquals("Bye World", response);
Spring DSL を使用した例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
当然ながら、Spring DSL は MINA2 にも使用することができます。以下の例では、ポート 5555 で TCP サーバーを公開します。
<route> <from uri="mina2:tcp://localhost:5555?textline=true"/> <to uri="bean:myTCPOrderHandler"/> </route>
<route>
<from uri="mina2:tcp://localhost:5555?textline=true"/>
<to uri="bean:myTCPOrderHandler"/>
</route>
上記のルートでは、テキストのコーデックを使用して、ポート 5555 で TCP サーバーを公開します。ID
myTCPOrderHandler
を持つ Spring Bean がリクエストを処理し、応答を返します。たとえば、ハンドラー Bean は以下のように実装できます。
public String handleOrder(String payload) { ... return "Order: OK" }
public String handleOrder(String payload) {
...
return "Order: OK"
}
完了時にセッションを閉じる リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
サーバーとして動作する場合、クライアントの変換が終了する場合などにセッションを閉じることがあります。Camel に対してセッションを閉じるよう指示するには、
CamelMinaCloseSessionWhenComplete
キーを持つヘッダーをブール値 true
に追加する必要があります。
たとえば、以下の例では、
bye
メッセージをクライアントに書き戻した後にセッションを閉じます。
メッセージの IoSession を取得します。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このキー
Mina2Constants.MINA_IOSESSION
を使用してメッセージヘッダーから IoSession を取得し、キー Mina2Constants.MINA_LOCAL_ADDRESS
キーでローカルホストアドレスとリモートホストアドレスを Mina2Constants.MINA_REMOTE_ADDRESS
キーで取得することもできます。
Mina フィルターの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
フィルターを使用すると、
SslFilter
などの一部の Mina フィルターを使用できます。カスタマイズされたフィルターを実装することもできます。codec
および logger
は、タイプ IoFilter
の Mina フィルターとしても実装されることに注意してください。定義できるフィルターは、フィルターチェーンの最後に追加されます。つまり、codec
および logger
の後です。
- 以下も参照してください。