Spring 基于对象类型的集成对象转换器

Spring integration Object transformer based on Object Type

Spring 集成具有将有效负载转换为 JSON/XML 的转换器。 问题是由于不同的服务通过相同的 Messaging channel [AMQP].

进行通信

我想将 JSON type payload 分开到一个频道,将 XML type payload 分开到另一个频道。

<amqp:inbound-channel-adapter channel="inputChannel" listener-container="messageListener"/>
<int:chain input-channel="inputChannel">
    <int:object-to-json-transformer object-mapper="jsonMapper" />
    <!--- based on payload type --->
    <tranformer ref="xmlMarshalUnmarshal" method="doTransform" />
</int:chain>

有什么想法吗?我正在使用最新的 Spring 4.1.x

您可以通过 Router 实现。

我不确定 <int:payload-type-router> 是否有帮助,因为我确定您的 AMQP 适配器基于默认 SimpleMessageConverter,returns String body 喜欢你的 JSON 或 XML.

从另一端需要知道另一个 AMQP 端是如何工作的(生产者)。它是否为那些特定消息填充 content-type header?

我们可以使用 <header-value-router>:

<header-value-router input-channel="inputChannel" header-name="contentType">
    <int:mapping value="text/json" channel="jsonTransformerChannel" />
    <int:mapping value="text/xml" channel="xmlTransformerChannel" />
</header-value-router>

从另一边你总是可以转换你的 body 已经与 <int-amqp:inbound-channel-adapter> 注入 message-converter