2013-11-02 157 views
1

我是Spring Integration和Spring Integration AMQP的新手。Spring集成 - 标题丢失

我有以下代码:

<bean id="enricher" class="soft.Enricher"/> 

<amqp:inbound-channel-adapter queue-names="QUEUE1" channel="amqpInboundChannel"/> 

<int:channel id="amqpInboundChannel"> 
    <int:interceptors> 
     <int:wire-tap channel="logger"/> 
    </int:interceptors> 
</int:channel> 

<int:header-enricher input-channel="amqpInboundChannel" output-channel="routingChannel"> 
     <int:header name="store" value="sj" /> 
</int:header-enricher> 

<int:channel id="routingChannel" /> 

<int:header-value-router input-channel="routingChannel" header-name="store"> 
    <int:mapping value="sj" channel="channelSJ" /> 
    <int:mapping value="jy" channel="channelJY" /> 
</int:header-value-router> 

<amqp:outbound-channel-adapter channel="channelSJ" exchange-name="ex_store" routing-key="sj" amqp-template="rabbitTemplate"/> 
<amqp:outbound-channel-adapter channel="channelJY" exchange-name="ex_store" routing-key="jy" amqp-template="rabbitTemplate"/> 

<int:channel id="channelSJ" /> 
<int:channel id="channelJY" /> 

<int:logging-channel-adapter id="logger" level="ERROR" /> 

的设置如下:除了

My Setup

一切正常,当由入站捡到一个邮件头都将丢失声道适配器。

同样,使用出站通道适配器将消息发送到交换机时,名为“store”的头部也会丢失。

这是一个消息是如何通过入站通道适配器被拾起之前寻找:

Before

这是如何在同一消息的整个过程后寻找(注意没有报头)

After

回答

7

我认为你的问题描述here

默认情况下,只有标准的AMQP属性(例如, contentType)将被复制到Spring Integration MessageHeaders和从Spring Integration MessageHeaders中复制。除非通过此HeaderMapper的'requestHeaderNames'和/或'replyHeaderNames'属性明确标识,否则AMQP MessageProperties中的任何用户定义标头都不会复制到AMQP消息或从AMQP消息复制。如果您需要复制所有用户定义的头只需使用通配符字符“”。*”

所以,你需要定义的DefaultAmqpHeaderMapper自己的自定义实例和配置inbound-channel-adapter它。见here

它可能是这个样子:

 <bean id="myHeaderMapper" class="org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper"> 
        <property name="requestHeaderNames" value="*"/> 
        <property name="replyHeaderNames" value="*"/> 
     </bean> 

     <amqp:inbound-channel-adapter queue-names="QUEUE1" channel="amqpInboundChannel" 
             header-mapper="myHeaderMapper"/> 
+0

请您添加的代码示例 –

+0

这仅仅是基本的Spring配置没有什么神奇的,但我说的东西,应该接近你想要什么 – Vidya

+1

您还可以使用映射?。 -请求-在adapapter上的标题=“*”。 –