Java 如何确保只有在前一条路由结束后才触发路由?
Java 如何确保只有在前一条路由结束后才触发路由?,java,spring,apache-camel,Java,Spring,Apache Camel,from(“直接:+ccurresponents.ROUTE\u SYNC\u人员) .routeId(CCURecorants.ROUTE_SYNC_personals).noAutoStartup().log()).setProperty(“currentTime”).method().bean().bean().bean().bean().bean().bean().bean().log()//正在测试中。autoStartup(true).end()} 我有一种情况,我希望我以前的Apa
from(“直接:+ccurresponents.ROUTE\u SYNC\u人员)
.routeId(CCURecorants.ROUTE_SYNC_personals).noAutoStartup().log()).setProperty(“currentTime”).method().bean().bean().bean().bean().bean().bean().bean().log()//正在测试中。autoStartup(true).end()}
我有一种情况,我希望我以前的Apache camel路线完成,然后它只会再次触发相同的路线
下面是我尝试过但失败的地方
我尝试在路由开始时将AutoStart设置为false,并在路由结束前将其设置为true。是不是“我希望以前的Apache camel交换或消息完成?”
再次启动相同的路由-如果使用者端点使用轮询,则路由将通过拾取新消息和流程从头开始重新启动
然而,根据我的理解,我的回答如下:
关于路由或上下文开始,请参阅
您还可以在运行时启动和停止路由
public class RunTimeRouteControl {
private final String routeId;
public RunTimeRouteControl(String routeId) {
this.routeId = routeId;
}
public void stopRoutes(Exchange exchange) throws Exception {
exchange.getContext().getInflightRepository().remove(exchange, routeId);
exchange.getContext().stopRoute(routeId);
}
public void startRoutes(Exchange exchange) throws Exception {
exchange.getContext().getInflightRepository().remove(exchange, routeId);
exchange.getContext().startRoute(routeId);
}
}
Bean配置:
<bean id="runTimeRouteControl" class="RunTimeRouteControl" >
<constructor-arg name="routeId" value="routeName" />
</bean>
在上下文中
<to uri="bean:runTimeRouteControl?method=stopRoutes" />
我在我的一个应用程序中遇到了相同的情况。我是通过使用
startupOrder
实现的。使用此选项可以定义路线开始的顺序
-杰伊我们看不到你尝试了什么。您应该更新您的问题。noAutoStartup().log()).setProperty(“currentTime”).method().bean().bean().setProperty().body().bean().bean().bean().setProperty().noAutoStartup().process(新处理器(){}.bean().setProperty().body().bean().log()//正在测试中。autoStartup(true).endHi Jay,Startup order定义了仅为不同路由启动路由的顺序,但在我的情况下,我的路由与计划在时间间隔后运行的路由相同(CRON作业)有时我会遇到一种情况,即同一条路线仍在运行,但尚未完成任务,它再次被触发,我需要进行同步(如果同一条路线已在运行,则不应启动)。Manjeet,你有问题了。请参考本网站
http://camel.apache.org/oncompletion.html
Hi Jay,如果你能举例说明如何通过Oncompletion实现这一点,我将在spring DSL中解释如何实现。您可以使用
标记保留将首先运行并需要时间完成的代码部分。这将阻止重新开始路线运行。