如何从Spring Integration中的消息有效内容中获取Object值

时间:2013-04-25 05:58:52

标签: java spring spring-integration

如下图所示,我已经配置了spliter,并且在输入通道值中将是spring integration的通用消息

通用消息

Map<String,Object> payload;
    values are   
      serviceRequest=Some Object
      messageBusmessages= Some Object 

MessageHeaders headers;

现在我的要求就像我想从有效负载中获取值,这是按键映射并将其放在messagebus.channel和servicebody.channel中的其他内容

<int:splitter input-channel="outChannel"
    output-channel="messagebus.channel">
</int:splitter>

<int:splitter input-channel="outChannel"
    output-channel="servicebody.channel">
</int:splitter>

3 个答案:

答案 0 :(得分:2)

使用表达式,我们可以从有效负载图中获取对象,并根据需要将选项放入通道中。选项适用于我。

<int:splitter input-channel="outChannel" expression="payload.get('messagebusMesssages')"
    output-channel="message.channel">
</int:splitter>

<int:splitter input-channel="outChannel" expression="payload.get('serviceRequest')"
    output-channel="servicebody.channel">
</int:splitter>

<int:service-activator input-channel="servicebody.channel"
    ref="SITestAction" method="action" />

答案 1 :(得分:0)

我认为你不需要拆分,我认为你需要基于内容的路由。如果可以,可以在邮件的传入标题中添加一些内容,并使用开箱即用的spring integration header-value-router。

<header-value-router input-channel="routingChannel" header-name="testHeader">
  <mapping value="serviceRequest" channel="messagebus.channel" />
  <mapping value="messageBusmessages" channel="servicebody.channel" />
</header-value-router>

如果这不适合您的需要。看看下面的链接,看看Spring Integration用于路由的所有选项。

http://static.springsource.org/spring-integration/docs/2.0.0.RELEASE/reference/html/messaging-routing-chapter.html

答案 2 :(得分:0)

您可以使用<publish-subscribe-channel/>与2个订阅者<transformer/> s,并使用适当的表达式...

<int:publish-subscribe-channel id="outChannel"/>

<int:transformer input-channel="outChannel" outputChannel="messagebus.channel"
    expression="payload.['foo']"/>

<int:transformer input-channel="outChannel" outputChannel="servicebody.channel"
    expression="payload.['bar']"/>

这将连续处理;如果您希望它们并行运行,请在task-executor上添加<publish-subscribe-channel/>