2013-07-11 56 views
0

如何在與收件人列表路由器的彈簧集成中實現並行處理。Spring intgeration - recipientlistrouter - 並行處理

我的目標是路由器必須是基於內容的,並且像多播一樣將消息發送到並行處理的各種通道。我試圖組播駱駝駱駝彈簧整合,但不能基於

請幫助內容配置它,如果事情甘蔗做

感謝

回答

0

我已經通過擴展Sp​​ring的集成的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> 
1

如果我理解正確的問題,你只需要使用發佈訂閱渠道作爲路由器的輸出渠道。假設輸出通道任務執行器被配置爲具有多個線程,路由器將根據內容將消息引導到正確的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節複製而來。

+0

此外,取代'<發佈 -

此自定義路由器可以被配置如下subscribe-channel />你可以使用帶有<'子元素的''。在任何一種情況下,調用路由器的線程都會發送到該通道,並且該消息在執行程序的某個線程上分派)。 –