2016-05-04 3 views
2

Я даже не знаю, если я сформулировал свой вопрос, как правильный путь вокруг ;-)Выставьте OSGi службы, как верблюд Endpoint

То, что я в принципе хочу достичь что-то вроде этого:

<route > 
    <from uri="osgi:serviceName"/> 
    <!-- do some processing -> 
    <to uri="activemq:queue:inbox"/> 
</route> 

Поэтому я хотел бы иметь сервис OSGi в качестве отправной точки моего маршрута. На эту услугу могут ссылаться некоторые другие пакеты, а подает с входными данными, которые позже будут обработаны Маршрутом.

Как мне это сделать?

ответ

3

Просто создайте службу OSGi за пределами верблюда и маршрут, начинающийся с direct: anyname. Затем вы можете ввести ProducerTemplate в свою службу, чтобы вызвать маршрут оттуда.

+0

Можете ли вы объяснить это «впрыскивать ProducerTemplate в вашу службу» в немного более подробно? Или, может, у вас есть пример? Ура! – Frizz

+0

Я думаю, что самый простой способ - ввести CamelContext и сделать ProducerTemplate производитель = contrext.createProducerTemplate(); –

0

Чтобы использовать «osgi» в качестве схемы URI на маршруте Camel, вам необходимо создать пользовательский компонент Camel для обработки соответствующих команд OSGi. Для получения дополнительной информации см. http://camel.apache.org/creating-a-new-camel-component.html

Более простой альтернативой было бы написать пользовательские команды OSGi, которые использовали ProducerTemplate для отправки сообщений на маршрут Camel. Пример для Karaf можно найти здесь: https://github.com/apache/karaf/tree/master/demos/command

Injecting the ProducerTemplate может быть выполнен с использованием стандартной конфигурации пружин.

2

Если у вас действительно простая сигнатура метода или typeConverter для параметров, которые вы хотите передать, вы можете использовать CamelProxy, чтобы связать службу с вашим маршрутом в простом файле конфигурации XML.

Для расширяет пример док, вы бы что-то вроде:

<osgi:service id="service" ref="myProxySender"        (4) 
     interface="org.apache.camel.spring.config.MyProxySender" /> 

<camelContext xmlns="http://camel.apache.org/schema/spring"> 

    <!-- create a proxy that will route to the direct:start endpoint when invoked --> 
    <proxy id="myProxySender" 
      serviceInterface="org.apache.camel.spring.config.MyProxySender" 
      serviceUrl="direct:start"/> 

    <!-- this is the route that our proxy will routed when invoked 
     and the output from this route is returned as reply on the proxy --> 
    <route> 
     <from uri="direct:start"/> 
     <transform> 
      <simple>Bye ${body}</simple> 
     </transform> 
    </route> 

</camelContext> 
Смежные вопросы