blob: e0c1cbd84c6370eb15a1b9eb8725ad050031350b [file] [log] [blame]
[[pipeline-eip]]
= Pipeline EIP
:page-source: core/camel-core-engine/src/main/docs/eips/pipeline-eip.adoc
Camel supports the http://www.enterpriseintegrationpatterns.com/PipesAndFilters.html[Pipes and Filters] from the xref:enterprise-integration-patterns.adoc[EIP patterns] in various ways.
image::eip/PipesAndFilters.gif[image]
With Camel you can split your processing across multiple independent
xref:endpoint.adoc[Endpoint] instances which can then be chained
together.
== Options
// eip options: START
The Pipeline EIP has no options.
// eip options: END
[[pipeline-Examples]]
== Examples
You can create pipelines of logic using multiple
xref:endpoint.adoc[Endpoint] or xref:message-translator.adoc[Message
Translator] instances as follows
Though pipeline is the default mode of operation when you specify
multiple outputs in Camel. The opposite to pipeline is multicast; which
fires the same message into each of its outputs. (See the example
below).
In Java you do:
[source,java]
----
from("activemq:SomeQueue")
.pipeline()
.bean("foo")
.bean("bar")
.to("acitvemq:OutputQueueu");
----
The pipeline is the default mode, which can be omitted, and therefore you almost often write as:
[source,java]
----
from("activemq:SomeQueue")
.bean("foo")
.bean("bar")
.to("acitvemq:OutputQueueu");
----
In XML you can use the `<pipeline>` element
[source,xml]
----
<route>
<from uri="activemq:SomeQueue"/>
<pipeline>
<bean ref="foo"/>
<bean ref="bar"/>
<to uri="activemq:OutputQueue"/>
</pipeline>
</route>
----
In the above the pipeline element is actually unnecessary, you could use this:
[source,xml]
----
<route>
<from uri="activemq:SomeQueue"/>
<bean ref="foo"/>
<bean ref="bar"/>
<to uri="activemq:OutputQueue"/>
</route>
----
Its just a bit more explicit. However if you wish to use `<multicast/>` to
avoid a pipeline - to send the same message into multiple pipelines -
then the `<pipeline>` element comes into its own.
[source,xml]
----
<route>
<from uri="activemq:SomeQueue"/>
<multicast>
<pipeline>
<bean ref="something"/>
<to uri="log:Something"/>
</pipeline>
<pipeline>
<bean ref="foo"/>
<bean ref="bar"/>
<to uri="activemq:OutputQueue"/>
</pipeline>
</multicast>
</route>
----