Idempotent ConsumerPage edited by Christian MuellerChanges (1)
Full ContentIdempotent ConsumerThe Idempotent Consumer from the EIP patterns is used to filter out duplicate messages. This pattern is implemented using the IdempotentConsumer class. This uses an _expression_ to calculate a unique message ID string for a given message exchange; this ID can then be looked up in the IdempotentRepository to see if it has been seen before; if it has the message is consumed; if its not then the message is processed and the ID is added to the repository. The Idempotent Consumer essentially acts like a Message Filter to filter out duplicates. Camel will add the message id eagerly to the repository to detect duplication also for Exchanges currently in progress. Camel provides the following Idempotent Consumer implementations:
OptionsThe Idempotent Consumer has the following options:
Using the Fluent BuildersThe following example will use the header myMessageId to filter out duplicates RouteBuilder builder = new RouteBuilder() { public void configure() { errorHandler(deadLetterChannel("mock:error")); from("seda:a") .idempotentConsumer(header("myMessageId"), MemoryIdempotentRepository.memoryIdempotentRepository(200)) .to("seda:b"); } }; The above example will use an in-memory based MessageIdRepository which can easily run out of memory and doesn't work in a clustered environment. So you might prefer to use the JPA based implementation which uses a database to store the message IDs which have been processed from("direct:start").idempotentConsumer( header("messageId"), jpaMessageIdRepository(lookup(JpaTemplate.class), PROCESSOR_NAME) ).to("mock:result"); In the above example we are using the header messageId to filter out duplicates and using the collection myProcessorName to indicate the Message ID Repository to use. This name is important as you could process the same message by many different processors; so each may require its own logical Message ID Repository. For further examples of this pattern in use you could look at the junit test case Spring XML exampleThe following example will use the header myMessageId to filter out duplicates <!-- repository for the idempotent consumer --> <bean id="myRepo" class="org.apache.camel.processor.idempotent.MemoryIdempotentRepository"/> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <idempotentConsumer messageIdRepositoryRef="myRepo"> <!-- use the messageId header as key for identifying duplicate messages --> <header>messageId</header> <!-- if not a duplicate send it to this mock endpoint --> <to uri="mock:result"/> </idempotentConsumer> </route> </camelContext> Using This PatternIf you would like to use this EIP Pattern then please read the Getting Started, you may also find the Architecture useful particularly the description of Endpoint and URIs. Then you could try out some of the Examples first before trying this pattern out.
Change Notification Preferences
View Online
|
View Changes
|
Add Comment
|
- [CONF] Apache Camel > Idempotent Consumer confluence
- [CONF] Apache Camel > Idempotent Consumer confluence
- [CONF] Apache Camel > Idempotent Consumer confluence
- [CONF] Apache Camel > Idempotent Consumer confluence
- [CONF] Apache Camel > Idempotent Consumer confluence
- [CONF] Apache Camel > Idempotent Consumer confluence
- [CONF] Apache Camel > Idempotent Consumer confluence
- [CONF] Apache Camel > Idempotent Consumer confluence