如何在Java的运行时添加骆驼路线?我找到了一个Grails示例,但我已经在Java实现了它。
我的应用程序上下文。xml已经有一些预定义的静态路由,我想在运行时向它添加一些动态路由。可能吗?因为包含动态路由的唯一方法是编写路由。然后将路由定义加载到上下文。它将如何在现有的静态路由上工作?运行时路由
其中一个解决方案可以是:
定义路线:
private RouteDefinition buildRouteDefinition() {
RouteDefinition routeDefinition = new RouteDefinition();
routeDefinition.from(XX).to(ZZ); // define any route you want
return routeDefinition;
}
获取模型上下文并创建路由:
CamelContext context = getContext();
ModelCamelContext modelContext = context.adapt(ModelCamelContext.class);
modelContext.addRouteDefinition(routeDefinition);
有更多的方法可以了解骆驼的情况。举几个例子:
exchange.getContext()
routeBuilder.getContext()
@Himanshu,请看一下dynamicroute选项(换句话说,路由单),它可以帮助您根据特定条件动态路由到不同的“目的地”。
查看camel站点中的动态路由器帮助链接;
http://camel.apache.org/dynamic-router.html
from("direct:start")
// use a bean as the dynamic router
.dynamicRouter(method(DynamicRouterTest.class, "slip"));
在滑移法中;
/**
* Use this method to compute dynamic where we should route next.
*
* @param body the message body
* @return endpoints to go, or <tt>null</tt> to indicate the end
*/
public String slip(String body) {
bodies.add(body);
invoked++;
if (invoked == 1) {
return "mock:a";
} else if (invoked == 2) {
return "mock:b,mock:c";
} else if (invoked == 3) {
return "direct:foo";
} else if (invoked == 4) {
return "mock:result";
}
// no more so return null
return null;
}
希望对你有帮助。。。
谢谢
您只需在CamelContext上调用几个不同的API即可添加路由。。。像这样的
context.addRoutes(new MyDynamcRouteBuilder(context, "direct:foo", "mock:foo"));
....
private static final class MyDynamcRouteBuilder extends RouteBuilder {
private final String from;
private final String to;
private MyDynamcRouteBuilder(CamelContext context, String from, String to) {
super(context);
this.from = from;
this.to = to;
}
@Override
public void configure() throws Exception {
from(from).to(to);
}
}
有关完整示例,请参阅此单元测试。。。
https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/AddRoutesAtRuntimeTest.java
我正试图在GAE上开始一条骆驼路线,但却撞上了一堵又一堵砖墙。首先,我尝试了如下路线: 但那什么都起不到作用。由于对Camel和GAE都是新手,我怀疑这是因为组件在路由开始时不充当使用者。然后我试着启动计时器: 却从GAE中得到了一个严重的错误: 错误:拒绝访问(java.lang.RuntimePermission modifyThreadGroup) 事实证明,您不能在GAE上创建新的实例,而
我正在开发一个使用Apache Camel Routes来处理请求的应用程序。我想给每条路由添加缓存。因此,如果请求的数据已经在缓存中,我们不需要在路由中执行处理,否则将执行路由逻辑。 我想知道我们如何透明地为每条路由添加缓存。我最初想到的是在路由开始时添加对缓存内容的检查,并根据结果继续。另外,在路由结束时将路由响应添加到缓存中。但是,我认为这种方法使缓存逻辑与路由逻辑相结合。但是,我们仍然知道
我有一个Camel 2.13.1应用程序,它使用一个通过CXF组件访问的外部web服务。我使用Spring XML route元素的startupOrder属性来确保在我设置为在启动时调用一次的路由中调用web服务的登录操作(使用计时器组件)。 当我的应用程序关闭时,我想调用web服务并执行注销操作,但我看不到一个好方法。目前我正在使用Spring DSL,并正在研究该组织。阿帕奇。骆驼spi。S
问题内容: 我正在尝试从骆驼路线中删除一些样板。 例如,让我们考虑两条路线,它们是相似的,并且它们的大部分内部物质都可以生成。我已经创建了一个组件“模板”,该模板创建了,并修改了XML配置以使用模板组件。 正在从中定义自定义方法(添加路线定义)。因此,在启动Camel上下文时,路由定义会出现在上下文中,但是框架不会为其创建路由服务,因此它们不会启动。 如何开始添加路线? 可能我遇到了XY问题,您可
问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b
我拥有一个spring应用程序,希望在应用程序启动期间动态添加骆驼路由。endpoint在属性文件中配置,并在运行时加载。使用Java DSL,我使用for循环创建所有路由, 无法创建路由file_routeDirect:在:at:>>>onException[[class org.apache.camel.component.file.GenericFileOperationFailedExce