该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

外发消息转换

春季AMQP 1.4引入了内容类型委托消息转换器,其中实际的转换器是基于 在 incoming content type message 属性上。 这可以被入站端点使用。spring-doc.cadn.net.cn

从 Spring Integration 4.3 版本开始,你可以使用内容类型委托消息转换器在出站端点上也同样如此,且内容类型头部指示所使用的转换器。spring-doc.cadn.net.cn

以下示例配置为内容类型委托消息转换器,默认转换器为简易消息转换器(处理Java序列化和纯文本),以及一个JSON转换器:spring-doc.cadn.net.cn

<amqp:outbound-channel-adapter id="withContentTypeConverter" channel="ctRequestChannel"
                               exchange-name="someExchange"
                               routing-key="someKey"
                               amqp-template="amqpTemplateContentTypeConverter" />

<int:channel id="ctRequestChannel"/>

<rabbit:template id="amqpTemplateContentTypeConverter"
        connection-factory="connectionFactory" message-converter="ctConverter" />

<bean id="ctConverter"
        class="o.s.amqp.support.converter.ContentTypeDelegatingMessageConverter">
    <property name="delegates">
        <map>
            <entry key="application/json">
                <bean class="o.s.amqp.support.converter.Jackson2JsonMessageConverter" />
            </entry>
        </map>
    </property>
</bean>

发送消息ct请求频道其中内容类型头部设置为application/json导致选择 JSON 转换器。spring-doc.cadn.net.cn

这适用于出站通道适配器和网关。spring-doc.cadn.net.cn

从5.0版本开始,添加到消息属性发出消息的部分默认不会被映射头覆盖。 此前,只有当消息转换器是内容类型委托消息转换器(在这种情况下,首先映射了头部,以便选择合适的转换器。) 对于其他转换器,例如简易消息转换器映射的头部覆盖转换器添加的任何头部。 这会导致发件消息有剩余信息时出现问题内容类型头部(可能来自入站通道适配器)和正确的出站内容类型被错误覆盖。 解决方法是使用头部过滤器,在将消息发送到出站端点前移除该头部。spring-doc.cadn.net.cn

然而,也存在需要之前行为的情况——例如,当字符串包含 JSON 的有效载荷,简易消息转换器不了解内容,且设置内容类型消息属性 到文本/纯文字但你的应用程序想覆盖它到application/json通过设置内容类型发送给出站端点的消息头部。 这ObjectToJsonTransformer默认情况下,正是如此。spring-doc.cadn.net.cn

现在有一个名为标题映射最后在出站通道适配器和网关(以及AMQP支持的通道)上。 将此设置为true恢复覆盖转换器添加属性的行为。spring-doc.cadn.net.cn

从5.1.9版本开始,类似的版本回复标题MappedLastAmqpInboundGateway当我们发送回复并想覆盖由转换器填充的头部时, 更多信息请参见其JavaDocs。spring-doc.cadn.net.cn