2017-02-17 9 views
1

Я хочу повторно использовать шаги трансформации, определенные планом DSL на разных маршрутах верблюдов, но не смог узнать, как этого добиться.Camel DSL - логика преобразования повторного использования, определенная с помощью Blueprint DSL по разным маршрутам

Давайте приведем пример здесь:

<camelContext id="jms-context" xmlns="http://camel.apache.org/schema/blueprint"> 
     <route id="inputAqTest8"> 
      <from id="_fromAqTest8" uri="aqTest8:queue:QUELOGENTRY"/> 
      <!-- some complicated transformation here --> 
      <to id="_to1" uri="umChannel:topic:Input"/> 
     </route> 
     <route id="inputAqTest12"> 
      <from id="_fromAqTest12" uri="aqTest12:queue:QUEPOSTDATA"/> 
      <!-- some complicated transformation here --> 
      <to id="_to2" uri="umChannel:topic:Input"/> 
     </route> 
    </camelContext> 

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

<camelContext id="jms-context" xmlns="http://camel.apache.org/schema/blueprint"> 
     <route id="inputAqTest8"> 
      <from id="_fromAqTest8" uri="aqTest8:queue:QUELOGENTRY"/> 
      <to id="_to1" uri="direct:process"/> 
     </route> 
     <route id="inputAqTest12"> 
      <from id="_fromAqTest12" uri="aqTest12:queue:QUEPOSTDATA"/> 
      <to id="_to2" uri="direct:process"/> 
     </route> 
     <route id="process"> 
      <from id="_from1" uri="direct:process"/> 
      <!-- some complicated transformation here --> 
      <to id="_to" uri="umChannel:topic:Input"/> 
     </route> 
    </camelContext> 

Это прекрасно повторяет логику преобразования. Но поскольку прямая синхронизация «вызовов», маршруты больше не являются независимыми. Кроме того, у меня теперь только один продюсер замедляется, поскольку параллельная доставка преобразованных сообщений не может произойти (это также причина, по которой я не хотел объединять все в один маршрут).

Итак, как я могу получить лучшее из обоих подходов - повторно использовать определение трансформации и сохранить маршруты независимыми? Заранее благодарю за ваши идеи.

ответ

0

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

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

0

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

<bean id="myBean" scope="pototype" class="com.my.org.MyComplexTransformation/> 

<route id="inputAqTest8"> 
     <from id="_fromAqTest8" uri="aqTest8:queue:QUELOGENTRY"/> 
     <bean ref="myBean"/> 
     <to id="_to1" uri="umChannel:topic:Input"/> 
</route> 
<route id="inputAqTest12"> 
     <from id="_fromAqTest12" uri="aqTest12:queue:QUEPOSTDATA"/> 
     <bean ref="myBean"/> 
     <to id="_to2" uri="umChannel:topic:Input"/> 
</route>