Верблюжий маршрут по требованию / триггер - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь реализовать следующий поток сообщений JMS с использованием верблюжьих маршрутов: на внешнем брокере сообщений опубликована тема.Моя программа прослушивает сообщения на эту тему.Каждое входящее сообщение запускает определенный маршрут, который необходимо выполнить - ТОЛЬКО ОДИН РАЗ (какой-то специальный, одноразовый маршрут).Предполагается, что этот маршрут перемещает сообщения между очередями в моем внутреннем брокере сообщений на основе некоторого селектора (получить все сообщения из очереди A, соответствующие данному селектору, и переместить их в очередь B).Я только начинаю с верблюда, и до сих пор я разобрался только с первой частью - прослушиванием сообщений по теме:

<bean id="somebroker" class="org.apache.camel.component.jms.JmsComponent"
    p:connectionFactory-ref="rmAdvisoriesConnectionFactory"/>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <endpoint id="jms" uri="somebroker:topic:sometopic"/>
    <route id="routeAdvisories">
        <from ref="jms"/>
        <to>???</to>
    </route>
</camelContext>

Можете ли вы предложить пункт назначения для этих рекомендательных сообщений?Мне нужно прочитать некоторые их свойства JMS и использовать эти значения для создания селектора JMS, который будет использоваться для операции «переместить сообщения».Но я понятия не имею, как объявить и запустить этот специальный маршрут.Было бы идеально, если бы я мог определить его в том же camelContext, используя только Spring DSL.Или, в качестве альтернативы, я мог бы направить рекомендации к какому-то java-методу, который бы создавал и выполнял эти специальные маршруты.Но если это невозможно, я буду благодарен за любое предложение.Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я не мог заставить его работать так, как я планировал, поэтому мне пришлось отказаться от своего первоначального подхода.Вместо использования верблюжьих маршрутов для перемещения сообщений между очередями (теперь я не уверен, что верблюжьи маршруты даже предназначены для такого использования), я в конечном итоге использовал ManagedRegionBroker - способ реализации операции JMX "moveMatchingMessagesTo" - для перемещения сообщений, соответствующих данному селектору.

0 голосов
/ 06 июня 2018

Насколько я понимаю, будет полезно использовать опцию 'селектор' в вашем потребительском маршруте JMS, например:

from("activemq:queue:test?selector=key='value1'").to("mock:a");
from("activemq:queue:test?selector=key='value2'").to("mock:b");

Возможно, другой вариант - реализовать некоторые маршруты на основеПараметр «Маршрутизатор на основе содержимого» с помощью параметра «Выбор». Дополнительную информацию можно найти здесь: http://camel.apache.org/content-based-router.html

Надеюсь, это поможет.

...