Camel Component: Infinispan - 6.3

Talend ESB Mediation Developer Guide

EnrichVersion
6.3
EnrichProdName
Talend Data Fabric
Talend Data Services Platform
Talend ESB
Talend MDM Platform
Talend Open Studio for ESB
Talend Real-Time Big Data Platform
task
Design and Development
EnrichPlatform
Talend ESB

Available as of Camel 2.13.0

This component allows you to interact with Infinispan distributed data grid / cache. Infinispan is an extremely scalable, highly available key/value data store and data grid platform written in Java.

Maven users will need to add the following dependency to their pom.xml for this component:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-infinispan</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

URI format

infinispan://hostName?[options]

URI Options

The producer allows sending messages to a local infinispan cache configured in the registry, or to a remote cache using the HotRod protocol. The consumer allows listening for events from local infinispan cache accessible from the registry.

Name

Default Value

Type

Context

Description

cacheContainer

null

CacheContainer

Shared

Reference to a org.infinispan.manager.

CacheContainer in the Registry.

cacheName

null

String

Shared

The cache name to use. If not specified, default cache is used.

command

PUT

String

Producer

The operation to perform. Currently supports the following values: PUT, GET, REMOVE, CLEAR.

eventTypes

null

Set<String>

Consumer

The event types to register. By default will listen for all event types. Possible values defined in org.infinispan.notifications.

cachelistener.event.Event.Type

sync

true

Boolean

Consumer

By default the consumer will receive notifications synchronosly, by the same thread that process the cache operation.

Message Headers

Name

Default Value

Type

Context

Description

CamelInfinispanCacheName

null

String

Shared

The cache participating in the operation or event.

CamelInfinispanOperation

PUT

String

Producer

The operation to perform: CamelInfinispanOperationPut, CamelInfinispanOperationGet, CamelInfinispanOperationRemove, CamelInfinispanOperationClear.

CamelInfinispanKey

null

Object

Shared

The key to perform the operation to or the key generating the event.

CamelInfinispanValue

null

Object

Producer

The value to use for the operation.

CamelInfinispanOperationResult

null

Object

Producer

The result of the operation.

CamelInfinispanEventType

null

String

Consumer

The type of the received event. Possible values defined here org.infinispan.notifications.

cachelistener.event.Event.Type

CamelInfinispanIsPre

null

Boolean

Consumer

Infinispan fires two events for each operation: one before and one after the operation.

Example

Below is an example route that retrieves a value from the cache for a specific key:

from("direct:start")
        .setHeader(InfinispanConstants.OPERATION, constant(InfinispanConstants.GET))
        .setHeader(InfinispanConstants.KEY, constant("123"))
        .to("infinispan://localhost?cacheContainer=#cacheContainer");

Using the Infinispan based idempotent repository

In this section we will use the Infinispan based idempotent repository.

First, we need to create a cacheManager and then configure our org.apache.camel.component.infinispan.processor.idempotent.

InfinispanIdempotentRepository:

<bean id="cacheManager" class="org.infinispan.manager.DefaultCacheManager" 
init-method="start" destroy-method="stop"/>
<bean id="infinispanRepo" class="org.apache.camel.component.infinispan.processor.idempotent.
InfinispanIdempotentRepository"
      factory-method="infinispanIdempotentRepository">
    <argument ref="cacheManager"/>
    <argument value="idempotent"/>
</bean>

Then we can create our Infinispan idempotent repository in the spring XML file as well:

<camelContext xmlns="http://camel.apache.org/schema/spring">   
    <route id="JpaMessageIdRepositoryTest">
        <from uri="direct:start" />
        <idempotentConsumer messageIdRepositoryRef="infinispanStore">
            <header>messageId</header>
            <to uri="mock:result" />
        </idempotentConsumer>
    </route>
</camelContext>