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