我是Spring集成的新手。我的配置文件中配置的通道很少,如下所示。
<int:channel id="channelOne" />
<int:channel id="channelTwo" />
<int:channel id="channelThree" />
我可以在这种情况下使用MessageHandlerChain(http://static.springsource.org/spring-integration/docs/2.0.0.RC1/reference/html/chain.html)吗?
谢谢!
答案 0 :(得分:14)
当通过直接通道连接端点时,链便于简化配置:
而不是
<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"/>
您可以使用
<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"/>
答案 1 :(得分:3)
我会看一下频道拦截器(http://static.springsource.org/spring-integration/docs/latest-ga/reference/htmlsingle/#channel-interceptors)。这些将允许您在消息到达输入通道之前执行某些操作,我假设它是channelOne。您可以根据您的使用情况记录消息或抛出异常等。
<channel id="channelOne">
<interceptors>
<ref bean="yourValidatingInterceptor"/>
</interceptors>
</channel>
<beans:bean id="yourValidatingInterceptor" class="com.yourcompany.YourValidatingInterceptor"/>
答案 2 :(得分:1)
当需要一组处理程序时,我们使用消息处理程序链 以线性方式连接。
<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>
在上面的示例中,通道拆分器的输出数据将是输入
service-activator ,并且service-activator的输出将是输入
聚合器 ...
我希望这个解释可以帮助您理解 <int:chain />