在Spring Integration中调用服务激活器和bean方法

时间:2016-05-30 11:25:16

标签: java spring spring-integration

在Spring Integration中,很少有人可以操纵消息。一种方法是在<int:enricher>内调用bean的方法,该方法将返回一个对象并将其分配给给定的名称,例如:

<!-- calls getKey method of IdGenerator bean which returns String with some value -->
<int:enricher input-channel="a.channel" output-channel="b.channel" id="preTranslator">
   <int:header name="Key" expression="@IdGenerator.getId(payload)"/> 
</int:enricher>

可以在过滤中使用相同的内容:

int:filter discard-channel="d.channel" input-channel="b.channel" output-channel="c.channel" 
     expression="@Cache.hasKey(headers.Key) == false"/>

另一方面,我可以在实现<int:service-activator>接口的类上调用MessageProcessor。它将采用原始消息并返回带有新标头字段的副本。这需要我的类的方法总是使用MessageBuilder构建一个新消息。

目前,我使用第一种方式进行简单的字段丰富和服务激活,以便从DB /外部服务请求数据。选择正确方法的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,<filter>根本不会改变消息。 given name应该被视为header,看你的情况。

<service-activator>始终返回新消息。是的,您也可以在那里填充新的headers,您必须使用MessageBuilder

完全不清楚你的问题是什么。如果你可以在配置中使用表达式来实现解决方案,那就这样吧。但是,如果您对代码中的邮件执行某些操作并希望添加/编辑/删除headers,则可以使用MessageBuilder

那真的很好。我认为您应该在应用程序中阅读更多文档和更多代码。

最终,您将找到最适合自己的风格。例如,我最终使用表达式和Groovy脚本。根本没有Java代码。但是现在我更喜欢Spring Integration Java DSL,因为它更快,更干净,更流畅,并且可以摆脱任何其他配置,如XML或Groovy。现在一切都是Java,MessageBuilder仍在马上!