[[Process-Manager]]
= Process Manager

Camel supports the
https://www.enterpriseintegrationpatterns.com/patterns/messaging/ProcessManager.html[Process Manager]
from the xref:enterprise-integration-patterns.adoc[EIP patterns] book.

The xref:routingSlip-eip.adoc[Routing Slip] demonstrates how a message can be routed through a dynamic series of processing steps.
The solution of the Routing Slip is based on two key assumptions: the sequence of processing steps has
to be determined up-front and the sequence is linear. In many cases, these assumptions may not be fulfilled.
For example, routing decisions might have to be made based on intermediate results.
Or, the processing steps may not be sequential, but multiple steps might be executed in parallel.

How do we route a message through multiple processing steps when the required steps may not be known
at design-time and may not be sequential?

image::eip/ProcessManager.gif[image]

Use a central processing unit, a Process Manager, to maintain the state of the sequence and determine
the next processing step based on intermediate results.

With Camel this pattern is implemented by using the xref:dynamicRouter-eip.adoc[Dynamic Router] pattern.
Camel's implementation of the dynamic router maintains the state of the sequence, and allows
to determine the next processing step based dynamically.

