2012-12-03 7 views
5

Ich bin neu in der Feder Integration. Ich habe wenige Kanäle in meiner Konfigurationsdatei wie folgt konfiguriert.Spring Integration Message Handler Kettenverwendung?

<int:channel id="channelOne" /> 
<int:channel id="channelTwo" /> 
<int:channel id="channelThree" /> 

kann ich mit MessageHandlerChain (http://static.springsource.org/spring-integration/docs/2.0.0.RC1/reference/html/chain.html) in diesem Szenario?

Danke!

+1

Allgemeinen zu verstehen, müssen Sie 2 chann els definiert einen Eingangs- und einen Ausgangskanal. Kannst du weiter erklären, was du zu tun versuchst ... – tjg184

+0

@ tjg184, ich habe einen Eingangskanal und einen Ausgangskanal, aber einen weiteren Kanal (channelTwo) zwischen Eingangs- und Ausgangskanal, der irgendeine Art von Validierung durchführt. Kann ich die Message-Handler-Kette in diesem Szenario verwenden – user1016403

Antwort

3

Ich würde Kanal Interceptors (http://static.springsource.org/spring-integration/docs/latest-ga/reference/htmlsingle/#channel-interceptors) betrachten. Dies würde Ihnen erlauben, etwas zu tun, bevor die Nachricht Ihren Eingangskanal trifft, von dem ich annehme, dass es channelOne ist. Je nach Anwendungsfall können Sie eine Nachricht protokollieren oder eine Ausnahme auslösen.

<channel id="channelOne"> 
    <interceptors> 
     <ref bean="yourValidatingInterceptor"/> 
    </interceptors> 
</channel> 

<beans:bean id="yourValidatingInterceptor" class="com.yourcompany.YourValidatingInterceptor"/> 
+0

Aktuelle Version ist 2.2.0: http://static.springsource.org/spring-integration/docs/2.2.0.RELEASE/reference/htmlsingle/#channel-interceptors, aber es ist besser, den "spätesten-ga" Link zu verwenden: http://static.springsource.org/spring-integration/docs/latest-ga/reference/htmlsingle/#channel-interceptors –

+0

@GaryRussell dankt Gary. – tjg184

10

Eine Kette ist eine bequeme Konfiguration zu vereinfachen, wenn Endpunkte durch direkte Kanäle verbunden sind: kann

Statt

<int:channel id="foo1"/> 

<int:service-activator input-channel="foo1" output-channel="foo2" ref="s1" /> 

<int:channel id="foo2"/> 

<int:service-activator input-channel="foo2" output-channel="foo3" ref="s2/> 

<int:channel id="foo3"/> 

<int:service-activator input-channel="foo3" output-channel="foo4" ref="s3" /> 

<int:channel id="foo4"/> 

Sie verwenden

<int:channel id="foo1"/> 

<int:chain input-channel="foo1" output-channel="foo4">  
    <int:service-activator ref="s1" /> 
    <int:service-activator ref="s2" /> 
    <int:service-activator ref="s3" /> 
</int:chain> 

<int:channel id="foo4"/> 

Bitte benutzen Sie den current documentation .

1

verwenden wir Message Handler Kette, wenn eine Reihe von Handlern linear verbunden sein muss.

<int:chain input-channel="marketDataInputChannel"> 
    <int:splitter ref="marketDataSplitter"/> 
    <int:service-activator ref="marketFieldServiceActivator"/> 
    <int:aggregator ref="marketDataAggregator"/> 
    <int:service-activator ref="marketItemServiceActivator"/> 
</int:chain> 

im Beispiel die Ausgangsdaten des Kanal Eiler oberhalb, der Eingang des Service-Aktivator, und der Ausgang des Service-Aktivator wird dem Eingang des Aggregator sein .. .
ich hoffe, dass diese Erklärung Ihnen helfen, die Nützlichkeit von <int:chain />

+0

Sie haben keinen Ausgabekanal für diese Kette definiert ... Ich habe das an anderen Stellen gesehen und glaube, dass es legitim ist, aber wohin geht die Ausgabe Ihres "marketItemServiceActivator"? – HDave