Настройте маршрут Apache Camel между двумя очередями ActiveMQ, чтобы использовать производителя для определенной очереди назначения, а не неопознанного производителя - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь настроить Apache Camel с ActiveMQ для соединения между очередью на моем сервере ActiveMQ и очередью на удаленном сервере ActiveMQ.Пока все просто.Вот соответствующий бит моего camel.xml:

<camelContext xmlns="http://camel.apache.org/schema/spring" id="camel">
  <route>
    <from uri="local:Request"/>
    <to uri="remote:Request"/>
  </route>
</camelContext>

<bean id="local" class="org.apache.activemq.camel.component.ActiveMQComponent">
  <property name="brokerURL" value="tcp://localhost:61616"/>
</bean>

<bean id="remote" class="org.apache.activemq.camel.component.ActiveMQComponent">
  <property name="brokerURL" value="tcp://remote:61616"/>
</bean>

Я проверил это на двух серверах, которые я контролирую, и он отлично работает.Тем не менее, удаленный сервер, к которому я пытаюсь подключиться, - это один, который я не контролирую, и (вероятно, из-за плохо написанной реализации авторизации на заказ) он демонстрирует поведение, которое, кажется, неотлично работает с Camel.

Проблема заключается в следующем: удаленный сервер использует все подключенные к нему экземпляры Producer, имеющие значение для указанного назначения , тогда как по умолчанию Camel, кажется, создает неопознанный производитель ( JMS-ссылка для контекста ).Если создается неопознанный производитель, этот удаленный сервер просто разрывает соединение.

Поэтому у меня возникает вопрос: есть ли способ заставить Camel не использовать неопознанный производитель, желательно без необходимости изменять исходный код Camel?

1 Ответ

0 голосов
/ 28 декабря 2018

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

Создание компонента Java, который использует шаблон ProducerTemplate для отправки сообщений удаленному посреднику.Создайте ProducerTemplate с конечной точкой по умолчанию , чтобы вам не нужно было указывать конечную точку для отправки сообщений.

Затем измените маршрут, чтобы использовать компонент в качестве отправителя

.to("bean:mySenderBean")
...