Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 使用一个主上下文启动多个主上下文_Apache Camel - Fatal编程技术网

Apache camel 使用一个主上下文启动多个主上下文

Apache camel 使用一个主上下文启动多个主上下文,apache-camel,Apache Camel,从主camelContext启动多个其他camelContext的最佳方式(并且允许)是什么: 我试着这样做: @ContextName("master") public class MasterContext extends CdiCamelContext { @PostConstruct void customize() { setName("MASTER-Context"); //some

从主camelContext启动多个其他camelContext的最佳方式(并且允许)是什么:

我试着这样做:

    @ContextName("master")
    public class MasterContext extends CdiCamelContext {


        @PostConstruct
        void customize() {

            setName("MASTER-Context");
            //some config  for the master.. properties...

            for (Service service : services){
               CamelContext ctx = new DefaultCamelContext() ;

               ctx.addRoutes(getRouteBuilder(someinfo))
            }

        }
我找不到一个例子,一个人创造其他人


这样做会循环并得到递归调用……

您应该尝试使用类似或的OSGi容器。
当您在这样的容器中部署应用程序时,它会获得自己的上下文

上下文之间的通信可以使用或队列或组件来执行。

上下文创建由容器管理。该容器还允许您在任何上下文中启动和停止单个路由,或者您可以使用在应用程序中控制它们。

我在保险领域工作,向个人销售保险,集团,即公司和索赔等被视为单独的产品。但所有这些模块可能都是单个产品的一部分,其中单个camelContext可以正常工作。如果我必须将所有这些模块部署为单独的war/Jar,那么路由重构就成了一场噩梦,因为在重构之后,我需要确保在业务方面一切正常工作。因此,如果需要,我需要部署每个模块。为了实现这一点,我尝试创建routeContext,但routeContext有其自身的局限性,因此我为每个模块创建了单独的camelContext,为此,您需要在创建端点、代理等时引用正确的camelContext,否则在运行时会出现许多问题。例如:-

 <camel:proxy id="abc" camelContextId="camelContext-main" serviceInterface="com.abc" serviceUrl="direct:abc"/>
<camel:endpoint id="xyz" camelContextId="camelContext-second" uri="bean:klm"></camel:endpoint>
<camel:endpoint id="123" camelContextId="camelContext-main" uri="bean:dddd"></camel:endpoint>
<camel:endpoint id="ssss" camelContextId="camelContext-second" uri="bean:ttt"></camel:endpoint>

如果您有多个camelContext,那么spring将使用第一个camelContext成功绑定所有路由,当spring容器开始绑定下一个camelContext路由时,它将开始抛出异常。
因此,从第二个camelContext开始,端点必须具有对上下文的正确引用,因为此时spring容器得到了两个camelContext引用,并且混淆了要绑定路由的用户。因此,如果您将在端点指定正确的驼峰上下文id,则不会出现问题。一切都会好起来的。谢谢。这样做的具体原因是什么?CamelConext位于应用程序级别。如果您需要将大型CamelContext拆分为较小的部分,则有一个RouteContext,您可以在CamelContext中包含和引用其中的许多内容。是的,这是一种不好的做法,请使用1个CamelContext和N个routes。我想要一种管理多个服务的应用程序,每个服务都有自己的CamelContext。我想停止一些没有其他路由(分组路由)的路由,并且每个路由都有自己的属性。因此,您谈论的是路由级别,而不是应用程序级别的上下文。也许你可以用微服务的概念来代替?每个服务一个WAR(应用程序),在任何级别单独部署,从一个EAR到所有EAR,每个服务最多部署一个容器?确定。知道了。我现在使用类似的模式,但是使用EAR/WAR,而不是在骆驼上下文级别处理它。一个服务->一场战争,那么它可以是一个服务->一个EAR,但如果需要,EAR可以有不止一场战争。当然,这不是确切的“微服务”概念,但对于标准SOA的过渡期来说,它可能是有用的。答案是thx,但我正在尝试在没有任何容器的情况下实现这一点,只是一个单独的java se应用程序。。。