2017-10-10 19 views
0

我创建了2个不同的应用程序,并在其中一人开始了骆驼背景。如何在第二个应用程序中使用此已启动的上下文?如何共享2个不同的应用程序或战争之间的骆驼背景

我尝试用lookUpByname获取上下文()与JNDI上下文结合的骆驼上下文,但是负载可以在现有的环境。

在应用1应用2上下文设置NameStrategy并得到同样也试过,但看起来像骆驼汽车在DefaultCamelContextNameStrategy生成名称和前缀。

code snippet: 

Application 1 : 

public static void main(String[] args) 
{ 
CamelContext ctx = new DefaultCamelContext(); 
String camelContextId= "sample"; 
ctx.setNameStrategy(new DefaultCamelContextNameStrategy(
       camelContextId)); 
ctx.start(); 

} 

Application 2: 
public static void main(String[] args) 
{ 
sampleRouter testobj = new sampleRouter(); 
testobj.test(); 
} 

public class sampleRouter extends RouteBuilder 
{ 

public static CamelContext camelContext; 
public void test() 
try 
{ 

camelContext = getContext(); 
    try { 
     camelContext.stop(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

请指引我得到不同的应用程序已经启动的情况下,我想,以避免产生新的上下文每次。

回答

0

为什么你要避免多个CamelContexts?你想完成什么目标?
没有明确的要求,要帮助你并不容易,但是我会尝试并提出一些想法。

看着你的代码,你正在使用两个不同的 JVMs,因为你有2 main方法。
如果您的应用程序在不同的JVM上运行,使用JMS Message Broker像ActiveMQ的通讯层。

如果部署了2战/在相同 JVM的应用程序,你可以使用两个CamelContexts,让他们通过虚拟终端进行通信,其seda-vmdirect-vm

+0

谢谢亚历山德罗。我们使用Apache camel作为批处理作业的实现组件来读写文件。我们使用Rundeck作为调度程序,多个作业将在一天内运行,我们不想为每个作业创建新的上下文,而是使用已经启动的上下文。文件阅读器将是通用的;它将使用Camel作为文件处理的实现组件;反之骆驼将不知道正在运行的作业,但将作为执行机构只 当Rundeck触发job.File读者将获得CamelContext并开始骆驼航线作业传递的元数据。 – Sat

相关问题