| [[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> |
| ---- |