架构

Camel 生命周期

师成师成· 更新于 2026-09-28· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Camel 生命周期

Camel 使用一个名为 Service 的简单生命周期接口,该接口包含 start() 和 stop() 方法。

Camel 中的许多类都实现了 Service,例如 CamelContext 以及所有的 Component 和 Endpoint 类。

使用 Camel 时,通常需要启动 CamelContext,它将启动所有不同的组件和端点,并激活路由规则,直到上下文再次被停止。

CamelContext 生命周期

CamelContext 提供了控制其生命周期的方法:

  • build
  • init
  • start
  • stop
  • suspend
  • resume
  • shutdown

这些操作是成对的: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)遵循下图所示的生命周期状态:

image

org.apache.camel.support.service.ServiceSupport 是扩展自定义服务的一个很好的基类,因为它提供了跟踪状态的基本功能。你可以在 doStart、doStop、doSuspend、doResume 方法中实现自定义逻辑。

服务可以通过 org.apache.camel.SuspendableService 最优地支持挂起/恢复。这意味着 Camel 中并非所有服务都支持挂起。我们鼓励消费者支持挂起,这样就能挂起/恢复路由。

启动生命周期

在 Camel 启动时,有各种监听器可用于插入自定义代码,它们可以在启动过程中监听并作出响应,例如 LifecycleStrategy 或 MainListener。

如果你需要 Camel 在启动前检查某些条件,请参阅启动条件。

评论

登录后参与评论

正在加载评论…