0

我正在使用骆驼 2.16.2,我需要在多个 jar 中使用一个 CamelContext,因为我需要将所有骆驼路由器放入一个 CamelContext。所以我的战争将所有这些罐子作为 Maven 工件。

请让我知道如何处理上述情况?

编辑

只是为了详细说明上述问题。在我的战争 myApp.war 中,我已经初始化了 CamelContext。共有三个罐子 myApp1.jar、myApp2.jar 和 myApp3.jar。每个 jar 都有自己单独定义的路由器。

  1. 如何在每个 jar 中启动路由器?
  2. 我可以使用注入到每个路由器的相同 CamelContext 吗?
  3. 如果我无法通过 jars 处理,是否可以使用多个战争(myApp1.war、myApp2.war 和 myApp3.war)实现,并且每个战争都有不同的 camelContext 并从主战争(myApp.war)与这些路由器通信?
4

2 回答 2

0

正如其他人所说,您不能在不同的罐子中使用相同的 CamelContext。你能解释一下你想做什么吗?


恕我直言,您想要做的是使用不同罐子中定义的路由。因此,您可以定义一个骆驼上下文并添加来自不同罐子的所有路由。当然,您的 Camel-Context-JAR 必须有权访问所有这些 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

于 2016-03-09T17:12:41.260 回答
0

在做了一些研究后,找到了实现这一点的方法。事实上,我们可以在不同的 jar 中使用相同的 CamelContext,因为所有 jar 都在同一个战争(Web 容器)中。

我们可以Apache Camel 2.16.2使用骆驼 CDI 轻松实现。如果您使用 wildfly 部署您的战争,那么您可能需要添加骆驼补丁。下载wildfly 9.0.2 补丁

步骤如下。

在您的战争中创建一个 servlet 或 restService 并注入 camelContext。

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

使用以下注释在 jar 中创建一个路由器。

@Startup
@ApplicationScoped
public class MyJRouteBuilder extends RouteBuilder {

在配置方法中添加

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

在你的 jar 中创建一个 BootStrap 类并添加路由器

@Singleton
@Startup
public class BootStrap {

private CamelContext camelctx;

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

将您的 jar 作为工件添加到 war pom.xml 中。部署战争后,您可以看到 MyJRouteBuilder 已注册在cdi-context CamelContext. 所以现在您可以随时随地访问您的路由器。

希望这对任何与我有同样问题的人有用。

于 2016-03-29T09:54:43.520 回答