メッセージングブリッジ

メッセージングブリッジは、2 つのメッセージチャネルまたはチャネルアダプターを接続する比較的簡単なエンドポイントです。例: PollableChannel を SubscribableChannel に接続すると、サブスクライブするエンドポイントがポーリング構成を気にする必要がなくなります。代わりに、メッセージングブリッジがポーリング構成を提供します。

2 つのチャネル間に中間ポーラーを提供することにより、メッセージングブリッジを使用して受信メッセージを調整できます。ポーラーのトリガーは、メッセージが 2 番目のチャネルに到着する速度を決定し、ポーラーの maxMessagesPerPoll プロパティはスループットの制限を実施します。

メッセージングブリッジのもう 1 つの有効な使用箇所は、2 つの異なるシステムを接続することです。このようなシナリオでは、Spring Integration のロールは、必要に応じてこれらのシステム間の接続の作成とポーラーの管理に限定されます。おそらく、2 つのシステム間で少なくとも 1 つのトランスフォーマーを使用して、フォーマットを変換するのが一般的です。その場合、チャネルはトランスフォーマーエンドポイントの「入力チャネル」および「出力チャネル」として提供できます。データ形式の変換が不要な場合、メッセージングブリッジで十分です。

XML を使用したブリッジの構成

<bridge> 要素を使用して、2 つのメッセージチャネルまたはチャネルアダプター間のメッセージングブリッジを作成できます。これを行うには、次の例に示すように、input-channel および output-channel 属性を指定します。

<int:bridge input-channel="input" output-channel="output"/>

前述のように、メッセージングブリッジの一般的な使用例は、PollableChannel を SubscribableChannel に接続することです。このロールを実行するとき、メッセージングブリッジはスロットルとしても機能します。

<int:bridge input-channel="pollable" output-channel="subscribable">
     <int:poller max-messages-per-poll="10" fixed-rate="5000"/>
 </int:bridge>

同様のメカニズムを使用して、チャネルアダプターを接続できます。次の例は、Spring Integration の stream 名前空間からの stdin アダプターと stdout アダプター間の単純な「エコー」を示しています。

<int-stream:stdin-channel-adapter id="stdin"/>

 <int-stream:stdout-channel-adapter id="stdout"/>

 <int:bridge id="echo" input-channel="stdin" output-channel="stdout"/>

同様の構成は、file-to-JMS や mail-to-file など、他の(潜在的により有用な)チャネルアダプターブリッジでも機能します。今後の章では、さまざまなチャネルアダプターについて説明します。

ブリッジで「出力チャネル」が定義されていない場合、受信メッセージで提供される応答チャネルが使用されます(使用可能な場合)。出力も応答チャネルも使用できない場合、例外がスローされます。

Java 構成を使用したブリッジの構成

次の例は、@BridgeFrom アノテーションを使用して Java でブリッジを構成する方法を示しています。

@Bean
public PollableChannel polled() {
    return new QueueChannel();
}

@Bean
@BridgeFrom(value = "polled", poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "10"))
public SubscribableChannel direct() {
    return new DirectChannel();
}

次の例は、@BridgeTo アノテーションを使用して Java でブリッジを構成する方法を示しています。

@Bean
@BridgeTo(value = "direct", poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "10"))
public PollableChannel polled() {
    return new QueueChannel();
}

@Bean
public SubscribableChannel direct() {
    return new DirectChannel();
}

または、次の例に示すように、BridgeHandler を使用できます。

@Bean
@ServiceActivator(inputChannel = "polled",
        poller = @Poller(fixedRate = "5000", maxMessagesPerPoll = "10"))
public BridgeHandler bridge() {
    BridgeHandler bridge = new BridgeHandler();
    bridge.setOutputChannelName("direct");
    return bridge;
}

Java DSL でブリッジを構成する

次の例に示すように、Java ドメイン固有言語(DSL)を使用してブリッジを構成できます。

@Bean
public IntegrationFlow bridgeFlow() {
    return IntegrationFlows.from("polled")
            .bridge(e -> e.poller(Pollers.fixedDelay(5000).maxMessagesPerPoll(10)))
            .channel("direct")
            .get();
}