2015-09-03 142 views
0

我有一个简单的路由在骆驼的routeContext中定义(这条路由将用于多个路由)。骆驼不会发布到RabbitMq队列

<route id="sendToRabbitQueue"> 
     <from uri="direct:sendToQueue" /> 
     <convertBodyTo type="java.lang.String"/> 
     <setHeader headerName="rabbitmq.ROUTING_KEY"> 
      <constant>my.routing.key</constant> 
     </setHeader> 
     <to uri="ref:genericRabbitEndpoint"/> 
    </route> 

而且我有

<endpoint id="genericRabbitEndpoint" uri="rabbitmq://${rabbitmq.host}:${rabbitmq.port}/${rabbitmq.exchange.name}"> 
     <camel:property key="autoDelete" value="false" /> 
     <camel:property key="connectionFactory" value="#rabbitConnectionFactory" /> 
    </endpoint> 

是一个终点(在端点文件中定义) - 我所见过的http://camel.apache.org/rabbitmq.html页 - 这就是我得到了主意,设置页眉上exchange.However队列中没有消息正在发布。我清楚地忽略了一些东西,任何帮助将不胜感激。

+0

Airomega - 你是如何设置你的端点文件? – user481779

+0

我近两年前问过并回答了这个问题。自从现在(自豪的gopher) – Airomega

+0

感谢您的回复,我已经移动了公司,项目和语言。我想到了它。 – user481779

回答

4

所以这看起来像是一个小问题,答案与我没有在问题中包含的部分路线有关,因为我不认为它是相关的。

该路线始于RabbitMq endpoing(未包含在上面)。其结果是该交易所,当到达一定的兔子头设置: rabbitmq.ROUTING_KEY rabbitmq.EXCHANGE_NAME rabbitmq.DELIVERY_TAG

这些标题跨路由的废旧出现当我尝试重写值在不同的Rabbit终端上发布。我已经解决的方法是引入一个将头部去掉的bean。在我看来不理想的行为...

public void stripRabbitHeaders(@Headers Map headers) 
{ 
    headers.remove("rabbitmq.ROUTING_KEY"); 
    headers.remove("rabbitmq.DELIVERY_TAG"); 
    headers.remove("rabbitmq.EXCHANGE_NAME"); 
} 
+1

优秀的点和我花了至少一个小时的时间排除故障,直到我遇到您的文章。谢谢! –

+0

顺便说一句:你可以使用'removeHeaders(String pattern,String ... excludePatterns)轻松地从你的路线中删除标题' –

+1

如果我可以给你100票,我会的! –