2015-09-03 2 views
0

У меня есть простой маршрут, определенный в routeContext в Camel (этот маршрут будет использоваться в нескольких маршрутах).Верблюд не публикуется в очередь 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

Я спросил и ответил на вопрос почти два года назад. Я переехал компанию, проект и язык с тех пор (гордый суслик сейчас) – Airomega

+0

Спасибо за ответ. Я все понял. – user481779

ответ

4

Так что это похоже на битву, и ответ относится к части маршрута, который я не включил в вопрос, потому что я не думал, что это имеет значение.

Маршрут начинается с выхода RabbitMq (не включенного выше). В результате обмена имеет некоторые заголовки кролика установить, когда он прибывает: rabbitmq.ROUTING_KEY rabbitmq.EXCHANGE_NAME rabbitmq.DELIVERY_TAG

Эти заголовки используются по жизни пути и, по всей видимости, переопределяют значения, когда я пытаюсь для публикации на другой конечной точке кролика. Способ, который я исправил, - это введение компонента, который удаляет заголовки. Не идеальное поведение по-моему ...

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

Отличная точка и одна, которую я потратил, по крайней мере, на час, чтобы устранить неполадки, пока не наткнулся на ваш пост. Благодаря! –

+0

BTW: вы можете легко удалить заголовки из своего маршрута с помощью 'removeHeaders (String pattern, String ... excludePatterns)' –

+1

Если бы я мог дать вам 100 голосов, я бы это сделал! –

Смежные вопросы