如何在 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.
我创建了 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.