0

我一直在玩 Spring 集成,我看不出如何最好地解决以下问题。

假设我有 XML 消息到达通道。这些消息可能具有任意结构,我想将它们转换为我的规范形式,所以我想我想为每种类型的结构编写自定义转换器,以便我可以进行任何我想要的处理和错误检查。

显而易见的事情是连接路由器以查看消息并路由到适当的转换器,但我认为这意味着我需要将处理流程硬编码到指向每个转换器的通道上。

我想避免在不同的转换器和路由逻辑中进行硬配置,而想到的替代方案是拥有一组实现某种转换器的转换器boolean canHandle(message),这样我们就只向每个转换器显示消息,直到一个'声称'消息或我们用完。这样,我似乎可以在不实际修改处理流程的情况下将转换器注释到配置中。

我是 Spring 集成的新手,我很可能会误解这一点。在 Spring 集成中是否有一种常用的方法来做到这一点,我错过了什么还是我做错了?

4

1 回答 1

1

有很多方法可以做到这一点。第一个想到的是带有选择器表达式的收件人列表路由器:

<recipient-list-router id="simpleDynamicRouter" input-channel="simpleDynamicInput">
    <recipient selector-expression="@handler1.canHandle(payload)" channel="toHandler1"/>
    <recipient selector-expression="@handler2.canHandle(payload)" channel="toHandler2"/>
    <recipient selector-expression="@handler3.canHandle(payload)" channel="toHandler3"/>    
</recipient-list-router>

<transformer ... ref="handler1" />
<transformer ... ref="handler2" />
<transformer ... ref="handler3" />

其中 handler1 等是 <bean/> 与您的实现和 canHandle() 方法。

另一种选择是编写自己的自定义动态路由器;这里有一个如何做到这一点的例子https://github.com/SpringSource/spring-integration-samples/tree/master/advanced/dynamic-ftp

于 2012-08-03T13:51:15.207 回答