1

如下所示,我已经配置了拆分器,输入通道中的值将是 spring 集成的通用消息

通用消息

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>
4

3 回答 3

3

使用表达式,我们可以从有效负载映射中获取对象并按照以下选项的要求放入通道中,这对我有用。

<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" />
于 2013-04-25T13:11:26.220 回答
0

您可以将 a<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/>.

于 2013-04-25T12:25:30.607 回答
0

我认为您不需要拆分,我认为您需要基于内容的路由。如果可以,请在消息的传入标头中添加一些内容,并使用开箱即用的 spring 集成 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

于 2013-04-25T08:39:04.707 回答