2015-09-03 190 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票,我會的! –