如何确保只在前一个路由结束后才触发路由?

时间:2018-04-16 06:27:22

标签: java spring apache-camel

XmlDocument我有这样的情况,我希望以前的Apache骆驼路线完成然后它应该再次触发相同的路线。

以下是我尝试但未成功的内容。

我尝试在路由启动时将autostartup设置为false,并在完成之前设置为true。

2 个答案:

答案 0 :(得分:0)

是吗"我的情况是我希望我之前的交流或Apache骆驼的消息完成" ?

再次重新开始相同的路由 - 如果消费者端点使用轮询,则路由将从头开始通过选择新消息和进程再次开始。

但是,根据我的理解,答案如下: 关于路线或背景,请参考configuring-route-startup-ordering-and-autostartup

您还可以在运行时启动和停止路线

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" />

答案 1 :(得分:0)

我的申请表中有同样的情况。我是通过使用startupOrder实现的。使用这个可以定义路线必须开始的顺序。

Please Refer this link for more about start up order

-Jay