0

我创建了 2 个不同的应用程序,并在其中一个中启动了骆驼上下文。如何在第二个应用程序中使用这个已经启动的上下文?

我尝试通过使用 lookUpByname() 并将骆驼上下文与 jndi 上下文绑定来获取上下文,但可以加载现有上下文。

还尝试通过在应用程序 1 的上下文中设置 NameStrategy 并在应用程序 2 中获得相同的结果,但看起来骆驼自动在 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();
    }
}

请指导我在不同的应用程序中获取已经启动的上下文,因为我想避免每次都创建新的上下文。

4

1 回答 1

0

为什么要避免拥有多个 CamelContexts?你想达到什么目标?
如果没有明确的要求,很难帮助您,但是我会尝试提出一些想法。

查看您的代码,您正在使用两个不同的JVM,因为您有 2main种方法。
如果您的应用程序在不同的 JVM 中运行,请使用像 ActiveMQ 这样的JMS 消息代理作为通信层。

如果您在同一个JVM 中部署 2 个战争/应用程序,您可以使用两个 CamelContext 并让它们通过 VM 端点进行通信,例如seda-vmdirect-vm

于 2017-10-10T16:06:12.300 回答