【发布时间】:2014-05-02 13:10:43
【问题描述】:
我对 Apache Camel 非常陌生。我们需要同时处理多个动态路由生命周期。
比如说,有一个路由 A(静态),它在接收到消息时会动态生成另一个路由 B(B 的端点在消息本身中定义,事先不知道)。为不同的消息创建了不同的路由。
我们的问题是,有一个 X 类,我们想从其中暂停 A 并恢复 B,而另一个类 Y 正好相反。此切换不起作用。在 X 中,在 A 完全挂起之前,JVM 尝试对 B 执行恢复操作,看起来线程被阻塞了。
我只是猜测这是一个同步问题。如何解决此类问题?
RouteManager.deactivateRoute(ROUTE_A_ID); //it creates a thread to suspend route as mentioned in Camel's documentation
RouteManager.activateRoute(ROUTE_B_ID); //it adds (when B is new) or resumes
我的日志没有显示异常,只有两种情况发生,
- “正在等待,因为仍有 2 个进行中和待处理的交换完成,在 300 秒后超时。” - 此消息继续
- 什么都没有打印,但是 B 不工作(没有日志,什么都没有)
【问题讨论】:
-
Camel 默认支持优雅关闭camel.apache.org/graceful-shutdown.html,所以你可以在关闭路由时看到正在等待的消息。我需要了解更多关于您如何激活 routeB 的信息。
-
@WillemJiang:我们从camelContext.startRoute(B)开始路线B
标签: java synchronization apache-camel