我正在尝试从骆驼路线中删除一些样板。
例如,让我们考虑两条路线,它们是相似的,并且它们的大部分内部物质都可以生成。我已经创建了一个组件“模板”,该模板创建了TemplateEndpoint
,并修改了XML配置以使用模板组件。
TemplateEndpoint.generateRoute
正在从中StartupListener
定义自定义方法(添加路线定义TemplateEndpoint.setSuffix
)。因此,在启动Camel上下文时,路由定义会出现在上下文中,但是框架不会为其创建路由服务,因此它们不会启动。
如何开始添加路线StartupListener
?
可能我遇到了XY问题,您可以为我提供一种更好的解决方法(即,动态添加和启动路线) 。
相似的两条路线
<route id="route_A">
<from uri="restlet:/another1?restletMethods=GET" />
<to uri="first:run_A" />
<to uri="second:jump_A" />
<to uri="third:fly_A" />
</route>
<route id="route_B">
<from uri="restlet:/another2?restletMethods=GET" />
<to uri="first:run_B" />
<to uri="second:jump_B" />
<to uri="third:fly_B" />
</route>
修改后的XML
<route id="route_A">
<from uri="restlet:/another1?restletMethods=GET" />
<to uri="template://?suffix=A" />
</route>
<route id="route_B">
<from uri="restlet:/another2?restletMethods=GET" />
<to uri="template://?suffix=B" />
</route>
终点
public class TemplateEndpoint extends DefaultEndpoint {
/* some methods omitted */
// this endpoint creates a DefaultProducer, which does nothing
public void setSuffix(final String suffix) throws Exception {
this.getCamelContext().addStartupListener(new StartupListener() {
@Override
public void onCamelContextStarted(CamelContext context, boolean alreadyStarted) throws Exception {
generateRoute(suffix)
.addRoutesToCamelContext(context);
}
});
}
private RouteBuilder generateRoute(final String suffix){
final Endpoint endpoint = this;
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from(endpoint)
.to("first:run_" + suffix)
.to("second:jump_" + suffix)
.to("third:fly_" + suffix);
}
}
}
我会创建一个动态的路线建设者,例如
public class MyRouteBuilder extends RouteBuilder {
private String another;
private String letter;
public MyRouteBuilder(CamelContext context,String another, String letter) {
super(context);
this.another=another;
this.letter=letter;
}
@Override
public void configure() throws Exception {
super.configure();
from("restlet:/"+another+"?restletMethods=GET")
.to("first:run_"+letter)
.to("second:jump_"+letter)
.to("third:fly_"+letter);
}
}
并添加到某个事件,例如
public class ApplicationContextProvider implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext context)
throws BeansException {
camelContext=(CamelContext)context.getBean("mainCamelContext");
camelContext.addRoutes(new MyRouteBuilder(camelContext, "another1","A"));
camelContext.addRoutes(new MyRouteBuilder(camelContext, "another2","B"));
..
如何在Java的运行时添加骆驼路线?我找到了一个Grails示例,但我已经在Java实现了它。 我的应用程序上下文。xml已经有一些预定义的静态路由,我想在运行时向它添加一些动态路由。可能吗?因为包含动态路由的唯一方法是编写路由。然后将路由定义加载到上下文。它将如何在现有的静态路由上工作?运行时路由
但我的努力没有奏效。 谢谢你的帮助
我正在开发一个使用Apache Camel Routes来处理请求的应用程序。我想给每条路由添加缓存。因此,如果请求的数据已经在缓存中,我们不需要在路由中执行处理,否则将执行路由逻辑。 我想知道我们如何透明地为每条路由添加缓存。我最初想到的是在路由开始时添加对缓存内容的检查,并根据结果继续。另外,在路由结束时将路由响应添加到缓存中。但是,我认为这种方法使缓存逻辑与路由逻辑相结合。但是,我们仍然知道
我有3个单独运行的Spring Boot-Camel应用程序。我需要链接这些进程,例如在进程A完成后,它应该启动进程B,然后一旦进程B完成,它应该继续进程C。如果中间有任何进程失败,进程链应该重试失败的进程,并继续执行到下一个。此外,在进程A中,如果路由中的任何步骤有任何失败,那么我也需要重试并从中间步骤开始。有人能帮我实现这个场景吗?
正如标题所说:是否可以在路由(-builder)的流程功能中启动一个驼峰endpoint?我刚接触apache camel,但已经做了一些项目。 情况如下:我正在使用apache camel和西门子Teamcenter RAC执行一个SavedQuery。结果是一个ModelObject[]和找到的元素。 对于这些元素中的每一个,我现在需要启动另一个endpoint,执行第二个搜索查询。我想到了这
问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b