| [[Selective-Consumer]] |
| = Selective Consumer |
| |
| Camel supports the |
| https://www.enterpriseintegrationpatterns.com/patterns/messaging/MessageSelector.html[Selective Consumer] |
| from the xref:enterprise-integration-patterns.adoc[EIP patterns] book. |
| |
| The Selective Consumer from the EIP patterns can be implemented in two ways |
| |
| image::eip/MessageSelectorSolution.gif[image] |
| |
| == Selective Consumer using Components |
| |
| The first solution is to provide a Message Selector to the underlying URIs when creating your consumer. |
| For example when using JMS you can specify a selector parameter so that the message broker will only deliver messages matching your criteria. |
| |
| [source,java] |
| ---- |
| from("activemq:queue:hello?selector=color='red'") |
| .to("bean:red"); |
| ---- |
| |
| == Selective Consumer using Filter pattern |
| |
| The other approach is to use a xref:filter-eip.adoc[Message Filter] which is applied; |
| then if the filter matches the message your consumer is invoked as shown in the following example. |
| |
| [source,java] |
| ---- |
| from("seda:a") |
| .filter(header("foo").isEqualTo("bar")) |
| .process(myProcessor); |
| ---- |
| |
| And in XML |
| |
| [source,xml] |
| ---- |
| <route> |
| <from uri="seda:a"/> |
| <filter> |
| <simple>${header.foo} == 'bar'</xpath> |
| <process ref="myProcessor"/> |
| </filter> |
| </route> |
| ---- |