如何在與收件人列表路由器的彈簧集成中實現並行處理。Spring intgeration - recipientlistrouter - 並行處理
我的目標是路由器必須是基於內容的,並且像多播一樣將消息發送到並行處理的各種通道。我試圖組播駱駝駱駝彈簧整合,但不能基於
請幫助內容配置它,如果事情甘蔗做
感謝
如何在與收件人列表路由器的彈簧集成中實現並行處理。Spring intgeration - recipientlistrouter - 並行處理
我的目標是路由器必須是基於內容的,並且像多播一樣將消息發送到並行處理的各種通道。我試圖組播駱駝駱駝彈簧整合,但不能基於
請幫助內容配置它,如果事情甘蔗做
感謝
我已經通過擴展Spring的集成的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" />
爲了實現並行處理,可以有任務執行信道如下::
<int:channel id="parallelProcessingChannel1">
<int:dispatcher task-executor="threadPoolExecutor"/>
</int:channel>
如果我理解正確的問題,你只需要使用發佈訂閱渠道作爲路由器的輸出渠道。假設輸出通道任務執行器被配置爲具有多個線程,路由器將根據內容將消息引導到正確的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集成參考手冊的第5.1節複製而來。
此外,取代'<發佈 -
此自定義路由器可以被配置如下subscribe-channel />你可以使用帶有<'子元素的' '。在任何一種情況下,調用路由器的線程都會發送到該通道,並且該消息在執行程序的某個線程上分派)。 –