チャンネルアダプター
チャネルアダプターは、単一の送信者または受信者をメッセージチャネルに接続できるようにするメッセージエンドポイントです。Spring Integration は、JMS、ファイル、HTTP、Web サービス、メールなどのさまざまなトランスポートをサポートするためのアダプターを多数提供します。このリファレンスガイドの今後の章では、各アダプターについて説明します。ただし、この章では、シンプルだが柔軟なメソッド呼び出しチャネルアダプターのサポートに焦点を当てています。受信と送信の両方のアダプターがあり、それぞれがコア名前空間で提供される XML 要素で構成できます。これらは、ソースまたは宛先として呼び出すことができるメソッドがある限り、Spring Integration を継承する簡単な方法を提供します。
受信チャネルアダプターの構成
inbound-channel-adapter
要素は、Spring で管理されたオブジェクトの任意のメソッドを呼び出し、メソッドの出力を Message
に変換した後、非 null の戻り値を MessageChannel
に送信できます。アダプターのサブスクリプションがアクティブになると、ポーラーはソースからメッセージを受信しようとします。ポーラーは、提供された構成に従って TaskScheduler
でスケジュールされます。個々のチャネルアダプターのポーリング間隔または cron 式を構成するには、'poller' 要素に 'fixed-rate' や 'cron' などのスケジューリング属性のいずれかを指定できます。次の例では、2 つの inbound-channel-adapter
インスタンスを定義しています。
<int:inbound-channel-adapter ref="source1" method="method1" channel="channel1">
<int:poller fixed-rate="5000"/>
</int:inbound-channel-adapter>
<int:inbound-channel-adapter ref="source2" method="method2" channel="channel2">
<int:poller cron="30 * 9-17 * * MON-FRI"/>
</int:channel-adapter>
チャネルアダプターの式とスクリプトも参照してください。
ポーラーが提供されない場合、単一のデフォルトポーラーをコンテキスト内に登録する必要があります。詳細については、エンドポイント名前空間のサポートを参照してください。 |
重要: ポーラー構成 一部の
最初の構成では、ポーリングタスクはポーリングごとに 1 回呼び出され、各タスク(ポーリング)中に、
ただし、 ただし、メソッドが null を返すことが確実であり、各ポーリングで使用可能なソースの数だけポーリングする必要がある場合は、次の例に示すように、
|
送信チャネルアダプターの構成
outbound-channel-adapter
要素は、MessageChannel
を、そのチャネルに送信されたメッセージのペイロードで呼び出す必要がある POJO コンシューマーメソッドに接続することもできます。次の例は、送信チャネルアダプターを定義する方法を示しています。
<int:outbound-channel-adapter channel="channel1" ref="target" method="handle"/>
<beans:bean id="target" class="org.MyPojo"/>
適応されるチャネルが PollableChannel
である場合、次の例に示すように、ポーラーサブ要素を提供する必要があります。
<int:outbound-channel-adapter channel="channel2" ref="target" method="handle">
<int:poller fixed-rate="3000" />
</int:outbound-channel-adapter>
<beans:bean id="target" class="org.MyPojo"/>
POJO コンシューマー実装を他の <outbound-channel-adapter>
定義で再利用できる場合は、ref
属性を使用する必要があります。ただし、コンシューマー実装が <outbound-channel-adapter>
の単一の定義によってのみ参照される場合、次の例に示すように、それを内部 Bean として定義できます。
<int:outbound-channel-adapter channel="channel" method="handle">
<beans:bean class="org.Foo"/>
</int:outbound-channel-adapter>
同じ <outbound-channel-adapter> 構成で ref 属性と内部ハンドラー定義の両方を使用することは、あいまいな状態を作成するため許可されません。このような構成では、例外がスローされます。 |
channel
参照なしで任意のチャネルアダプターを作成できます。この場合、暗黙的に DirectChannel
のインスタンスが作成されます。作成されたチャンネルの名前は、<inbound-channel-adapter>
または <outbound-channel-adapter>
要素の id
属性と一致します。channel
が提供されない場合は、id
が必要です。
チャネルアダプターの式とスクリプト
他の多くの Spring Integration コンポーネントと同様に、<inbound-channel-adapter>
および <outbound-channel-adapter>
も SpEL 式評価のサポートを提供します。SpEL を使用するには、Bean でのメソッド呼び出しに使用される "ref" および "method" 属性を提供する代わりに、'expression' 属性で式ストリングを提供します。式が評価されると、メソッド呼び出しと同じ契約に従います。評価結果が null 以外の値である場合は常に <inbound-channel-adapter>
の式がメッセージを生成しますが、<outbound-channel-adapter>
の式は void と同等でなければなりません - メソッド呼び出しを返します。
Spring Integration 3.0 から、<int:inbound-channel-adapter/>
は SpEL <expression/>
(または <script/>
でも)サブエレメントで構成できます。これは、単純な 'expression' 属性で実現できるよりも高度な機能が必要な場合に使用します。location
属性を使用して Resource
としてスクリプトを提供する場合は、refresh-check-delay
を設定して、リソースを定期的にリフレッシュすることもできます。スクリプトをポーリングごとにチェックする場合は、次の例に示すように、この設定をポーラーのトリガーと調整する必要があります。
<int:inbound-channel-adapter ref="source1" method="method1" channel="channel1">
<int:poller max-messages-per-poll="1" fixed-delay="5000"/>
<script:script lang="ruby" location="Foo.rb" refresh-check-delay="5000"/>
</int:inbound-channel-adapter>
<expression/>
サブ要素を使用する場合は、ReloadableResourceBundleExpressionSource
の cacheSeconds
プロパティも参照してください。式の詳細については、Spring 式言語 (SpEL) を参照してください。スクリプトについては、Groovy サポートおよびスクリプトのサポートを参照してください。
<int:inbound-channel-adapter/> は、エンドポイントであり、定期的にいくつかの基になる MessageSource をポーリングすることによってメッセージフローを開始します。ポーリング時にはメッセージオブジェクトが存在しないため、式とスクリプトはルート Message にアクセスできないため、他のほとんどのメッセージング SpEL 式で使用可能なペイロードまたはヘッダープロパティはありません。このスクリプトは、ヘッダーとペイロードを持つ完全な Message オブジェクト、または基本ヘッダーを持つメッセージに追加されるペイロードのみを生成して返すことができます。 |