如何在 2 个不同的应用程序或 war 之间共享 camel 上下文

How to share the camel context between 2 different applications or war's

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

我尝试通过使用 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();
    }
}

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

为什么要避免拥有多个 CamelContext?您想要实现什么目标?
没有明确的要求,很难为您提供帮助,但我会尝试提出一些想法。

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

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