[[Lifecycle-CamelLifecycle]]
Camel Lifecycle
~~~~~~~~~~~~~~~

Camel uses a simple _lifecycle_ interface called
http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Service.html[Service]
which has a single start() and stop() method.

Various classes implement Service such as
link:camelcontext.html[CamelContext] along with a number of
link:component.html[Component] and link:endpoint.html[Endpoint] classes.

When you use Camel you typically have to start the
link:camelcontext.html[CamelContext] which will start all the various
components and endpoints and activate the routing rules until the
context is stopped again.

If you are working with Spring you may wish to read the
link:spring.html[Camel Spring documentation].

[[Lifecycle-CamelContextLifecycle]]
CamelContext Lifecycle
^^^^^^^^^^^^^^^^^^^^^^

The `CamelContext` provides methods to control its lifecycle:

* `start`
* `stop`
* `suspend` *Camel 2.5*
* `resume` *Camel 2.5*

The operations is paired: start/stop and suspend/resume.

Stop is performing a link:graceful-shutdown.html[Graceful shutdown]
which means all its internal state, cache, etc is cleared. And the
routes is being stopped in a graceful manner to ensure messages is given
time to complete. If you start a `CamelContext` after a stop, then its
performing a _cold_ start, recreating all the state, cache etc. again.

Instead you can use the suspend/resume operations. They will keep the
`CamelContext` _warm_ and only suspend/stop routes using the same
link:graceful-shutdown.html[Graceful shutdown] feature. This ensures
messages is given time to complete.

End users is encouraged to use suspend/resume if you are temporary
stopping a Camel application.

All these operations is available in link:camel-jmx.html[JMX] as well,
so you can control Camel from a management console.

If you write unit tests and perform _cold_ restarts using stop/start
then any previously looked up link:endpoint.html[Endpoint]s etc. is
obsolete, and therefore you need to re-lookup those endpoints again.

Instead use suspend/resume which keeps these
link:endpoint.html[Endpoint]s and therefore you can still use them after
resuming.

[[Lifecycle-Servicelifecycle]]
Service lifecycle
^^^^^^^^^^^^^^^^^

A service (`org.apache.camel.Service`) in Camel adheres to the following
lifecycle states as illustrated in the diagram below:

image:lifecycle.data/service_lifecycle.png[image]

*Notice:* A service can optimally support suspend/resume by the
`org.apache.camel.SuspendableService`. This means not all services in
Camel supports suspension. It's encouraged that consumers support
suspension which allows to suspend/resume routes.

The `org.apache.camel.impl.ServiceSupport` is a good base class to
extend for custom services as it offers the basic functionally to keep
track of state. You implement your custom logic in the `doStart`,
`doStop`, `doSuspend`, `doResume` methods.

[[Lifecycle-Routeslifecycle]]
Routes lifecycle
^^^^^^^^^^^^^^^^

Routes in Camel have the following operations to control its lifecycle

* `start`
* `stop`
* `suspend`
* `resume`
* `remove` (previously named shutdown)

The `remove` operation will *remove* the route, for example in
link:camel-jmx.html[JMX] the route will then be unregistered and its
gone. So only use remove if you really want to remove the route. The
route must have been stopped before you can remove.

The `start` and `resume` operations in link:camel-jmx.html[JMX] checks
the state beforehand. So if a route is stopped and you click `resume`,
it will know to invoke `start`. And likewise if a route has been
suspended and you click `start` it knows to `resume` instead. This makes
management a bit easier.

If a route is suspended then it keeps its resources and all their JMX
metrics alive. Where as stopping a route will graceful stop the route,
and clear its resources, and as well their JMX metrics. If you want to
temporary "pause" a route, then consider using suspend/resume over
stop/start.

If a route consumer does not support suspension, it will fallback and
stop the route instead.

[[Lifecycle-SeeAlso]]
See Also
^^^^^^^^

* link:camelcontext.html[CamelContext]
* link:architecture.html[Architecture]
* link:camel-jmx.html[JMX]

