Camel 生命周期
Camel 生命周期
Camel 使用一个名为 Service 的简单生命周期接口,该接口包含 start() 和 stop() 方法。
Camel 中的许多类都实现了 Service,例如 CamelContext 以及所有的 Component 和 Endpoint 类。
使用 Camel 时,通常需要启动 CamelContext,它将启动所有不同的组件和端点,并激活路由规则,直到上下文再次被停止。
CamelContext 生命周期
CamelContext 提供了控制其生命周期的方法:
buildinitstartstopsuspendresumeshutdown
这些操作是成对的:start/stop(启动/停止)和 suspend/resume(挂起/恢复)。
Stop 会执行一次优雅关机(Graceful Shutdown),这意味着它的所有内部状态、缓存等都会被清除;路由也会以优雅的方式停止,以确保消息有时间完成处理。
Shutdown 是 Camel 关闭时的最后阶段。执行 shutdown 之后,Camel 就无法再次启动。当 JVM 正在终止时会自动发生 shutdown,例如已被发出终止信号的 Spring Boot 应用。
如果你在 stop 之后启动 CamelContext,那么它执行的是一次冷启动,会重新创建所有的状态、缓存等;这并不能保证再次正确启动。相反,你可以使用 suspend/resume 操作。它们会使 CamelContext 保持热状态,仅使用相同的优雅关机功能挂起/停止路由。这样可确保消息有时间完成处理。 |
|---|
如果你只是临时停止一个 Camel 应用,建议最终用户使用 suspend/resume。
所有这些操作在 JMX 中同样可用,因此你可以通过 JMX 管理来控制 Camel。
Service 生命周期
Camel 中的服务(org.apache.camel.Service)遵循下图所示的生命周期状态:

org.apache.camel.support.service.ServiceSupport 是扩展自定义服务的一个很好的基类,因为它提供了跟踪状态的基本功能。你可以在 doStart、doStop、doSuspend、doResume 方法中实现自定义逻辑。
服务可以通过 org.apache.camel.SuspendableService 最优地支持挂起/恢复。这意味着 Camel 中并非所有服务都支持挂起。我们鼓励消费者支持挂起,这样就能挂起/恢复路由。 |
|---|
启动生命周期
在 Camel 启动时,有各种监听器可用于插入自定义代码,它们可以在启动过程中监听并作出响应,例如 LifecycleStrategy 或 MainListener。
如果你需要 Camel 在启动前检查某些条件,请参阅启动条件。
评论
登录后参与评论
KnowForge