Как использовать один и тот же CamelContext в нескольких банках на одной и той же войне

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

Пожалуйста, дайте мне знать, как мне справиться с вышеуказанным сценарием?

редактировать

Просто, чтобы уточнить подробнее по вышеуказанному вопросу. В моей войне myApp.war я инициализировал CamelContext. Есть три баночки myApp1.jar, myApp2.jar и myApp3.jar. У каждой банки есть свои собственные маршрутизаторы, определенные отдельно.

  1. Как мне запустить роутеры в каждой банке?
  2. Могу ли я использовать один и тот же CamelContext для каждого маршрутизатора?
  3. Если я не могу справиться с помощью jar-файлов, возможно ли реализовать с несколькими войнами (myApp1.war, myApp2.war и myApp3.war), и каждая война имеет разные camelContext и связывается с этими маршрутизаторами основной войны (myApp.war)?

2 ответа

Решение

После некоторых исследований нашли способ реализовать это. Фактически мы можем использовать один и тот же CamelContext в разных банках, поскольку все банки находятся в одной и той же войне (веб-контейнер).

Мы можем легко реализовать с Apache Camel 2.16.2 с верблюдом CDI. Если вы используете wildfly для развертывания своей войны, вам может понадобиться добавить патч для верблюдов. Скачать the wildfly 9.0.2 pach

Шаги приведены ниже.

В вашей войне создайте сервлет или restService и вставьте camelContext.

@Inject
@ContextName("cdi-context")
private CamelContext camelctx;

Создайте роутер в банке с аннотацией ниже.

@Startup
@ApplicationScoped
public class MyJRouteBuilder extends RouteBuilder {

В Configure метод добавить

@Override
public void configure() throws Exception {
    from("direct:startTwo").routeId("MyJRouteBuilder")
    .bean(new SomeBeanThree());
}

Создайте класс BootStrap в вашем банке и добавьте маршрутизатор

@Singleton
@Startup
public class BootStrap {

private CamelContext camelctx;

@PostConstruct
public void init() throws Exception {   
    camelctx.addRoutes(new MyJRouteBuilder());
}

Добавьте свой кувшин в качестве артефакта в войну pom.xml. Как только вы развернете войну, вы увидите, что MyJRouteBuilder зарегистрирован в cdi-contextCamelContext, Так что теперь вы можете получить доступ к вашему маршрутизатору где угодно.

Надеюсь, что это пригодится любому, кто имеет ту же проблему, что и я.

Как говорили другие парни, вы не можете использовать один и тот же CamelContext в разных банках. Не могли бы вы немного объяснить, что вы хотите сделать?


ИМХО, что вы хотите сделать, это использовать маршруты, определенные в разных банках. Так что для этого вы можете определить верблюжий контекст и добавить все маршруты из разных банок. Конечно, ваш Camel-Context-JAR должен иметь доступ ко всем этим банкам.

 <camel:camelContext id="camel5">
  <camel:package>org.apache.camel.spring.example</camel:package>
</camel:camelContext>

Или класс за классом

  <camelContext id="camel5" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="myBuilder" />    
  </camelContext>

  <bean id="myBuilder" class="org.apache.camel.spring.example.test1.MyRouteBuilder"/>

Или, если вы используете CDI, вы можете прочитать эту замечательную статью https://dzone.com/articles/using-camel-routes-in-java-ee-components

Ссылка: http://camel.apache.org/spring.html

Другие вопросы по тегам