如下图所示,我已经配置了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>
答案 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用于路由的所有选项。
答案 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/>
。