Apache Camel:如果之前的路由运行未完成,则不触发路由

Ask*_*mov 7 java timer apache-camel

我有这样的情况:

  • Apache Camel 路由由定时器触发
  • 路由执行大量冗长的任务
  • 并且在上一次运行仍在进行中时,计时器可能会再次触发路线。

我希望我的路线不会在大规模任务进行时重新触发。也就是说,定时器可能会发出事件,但它不应该以某种方式导致触发路由。当大量任务完成后,定时器应该可以重新开始路由。

实现这种行为的最佳方法是什么?

小智 1

我将创建一个 bean 来保存路由的运行/完成状态,并使用设置状态的方法和测试状态的方法。然后我会做这样的事情:

<route>
  <from uri="timer:...">
  <filter>
    <method ref="routeStateBean" method="isStopped">
    <to uri="bean:routeStateBean?method=routeStarted"/>
    ....
    <to uri="bean:routeStateBean?method=routeStopped"/>
  </filter>
</route>
Run Code Online (Sandbox Code Playgroud)