受信者リストルーターとの春の統合で並列処理を実現するにはどうすればよいですか?
私の目標は、ルーターがコンテンツベースであり、マルチキャストのように並列処理でさまざまなチャネルにメッセージを送信する必要があることです。camel-spring-integration を使用して Camel でマルチキャストを試しましたが、コンテンツ ベース用に構成できませんでした
何かできることがあれば助けてください
ありがとう
受信者リストルーターとの春の統合で並列処理を実現するにはどうすればよいですか?
私の目標は、ルーターがコンテンツベースであり、マルチキャストのように並列処理でさまざまなチャネルにメッセージを送信する必要があることです。camel-spring-integration を使用して Camel でマルチキャストを試しましたが、コンテンツ ベース用に構成できませんでした
何かできることがあれば助けてください
ありがとう
質問を正しく理解している場合は、パブリッシュ サブスクライブ チャネルをルーターの出力チャネルとして使用するだけです。ルーターはコンテンツに基づいて適切な pubsub チャネルにメッセージを送信し、出力チャネル タスク エグゼキュータが複数のスレッドを持つように構成されていると仮定すると、そのチャネルにサブスクライブされたすべてのハンドラが並行して実行されます。
<int:publish-subscribe-channel id="channel1" task-executor="someExecutor"/>
<int:publish-subscribe-channel id="channel2" task-executor="someExecutor"/>
<int:recipient-list-router id="customRouter" input-channel="routingChannel">
<int:recipient channel="channel1" selector-expression="payload.equals('foo')"/>
<int:recipient channel="channel2" selector-expression="headers.containsKey('bar')"/>
</int:recipient-list-router>
上記の受信者リスト ルーター構成は、Spring Integration リファレンス マニュアルのセクション 5.1 からコピーされます。
Spring-Integrations のRecipientListRouterを次のように拡張することで、同様の要件を達成しました。
public class CententBasedRecipientListRouter extends RecipientListRouter {
@Override
protected void handleMessageInternal(final Message<?> message) {
......
}
}
オーバーライドされたメソッドでは、要件に応じて、カスタマイズされたコンテンツ ベースのルーティング ロジックを実装できます。
このカスタム ルーターは、次のように構成できます。
<bean id="customRecipientListRouter" class="CententBasedRecipientListRouter">
<property name="channels">
<list>
<ref bean="parallelProcessingChannel1"/>
<ref bean="parallelProcessingChannel2"/>
<ref bean="parallelProcessingChannel3"/>
</list>
</property>
</bean>
<int:router ref="customRecipientListRouter"
input-channel="routingChannel"
default-output-channel="errorChannel" />
並列処理を実現するために、Task Executor チャネルを次のように設定できます。
<int:channel id="parallelProcessingChannel1">
<int:dispatcher task-executor="threadPoolExecutor"/>
</int:channel>