Hazelcast Component

Available as of Camel 2.7

The hazelcast: component allows you to work with the Hazelcast distributed data grid / cache. Hazelcast is a in memory data grid, entirely written in Java (single jar). It offers a great palette of different data stores like map, multi map (same key, n values), queue, list and atomic number. The main reason to use Hazelcast is its simple cluster support. If you have enabled multicast on your network you can run a cluster with hundred nodes with no extra configuration. Hazelcast can simply configured to add additional features like n copies between nodes (default is 1), cache persistence, network configuration (if needed), near cache, enviction and so on. For more information consult the Hazelcast documentation on http://www.hazelcast.com/docs.jsp.

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

URI format

Icon

You have to use the second prefix to define which type of data store you want to use.

Sections

  1. Usage of #map
  2. Usage of #multimap
  3. Usage of #queue
  4. Usage of #list
  5. Usage of #seda
  6. Usage of atomic number
  7. Usage of #cluster support (instance)

Usage of Map

map cache producer - to("hazelcast:map:foo")

If you want to store a value in a map you can use the map cache producer. The map cache producer provides 5 operations (put, get, update, delete, query). For the first 4 you have to provide the operation inside the "hazelcast.operation.type" header variable. In Java DSL you can use the constants from org.apache.camel.component.hazelcast.HazelcastConstants.

Header Variables for the request message:

Name

Type

Description

hazelcast.operation.type

String

valid values are: put, delete, get, update, query

hazelcast.objectId

String

the object id to store / find your object inside the cache (not needed for the query operation)

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastOperationType

String

valid values are: put, delete, get, update, query Version 2.8

CamelHazelcastObjectId

String

the object id to store / find your object inside the cache (not needed for the query operation) Version 2.8

You can call the samples with:

Sample for put:

Java DSL:

Spring DSL:

Sample for get:

Java DSL:

Spring DSL:

Sample for update:

Java DSL:

Spring DSL:

Sample for delete:

Java DSL:

Spring DSL:

Sample for query

Java DSL:

Spring DSL:

For the query operation Hazelcast offers a SQL like syntax to query your distributed map.

map cache consumer - from("hazelcast:map:foo")

Hazelcast provides event listeners on their data grid. If you want to be notified if a cache will be manipulated, you can use the map consumer. There're 4 events: put, update, delete and envict. The event type will be stored in the "hazelcast.listener.action" header variable. The map consumer provides some additional information inside these variables:

Header Variables inside the response message:

Name

Type

Description

hazelcast.listener.time

Long

time of the event in millis

hazelcast.listener.type

String

the map consumer sets here "cachelistener"

hazelcast.listener.action

String

type of event - here added, updated, envicted and removed

hazelcast.objectId

String

the oid of the object

hazelcast.cache.name

String

the name of the cache - e.g. "foo"

hazelcast.cache.type

String

the type of the cache - here map

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastListenerTime

Long

time of the event in millis Version 2.8

CamelHazelcastListenerType

String

the map consumer sets here "cachelistener" Version 2.8

CamelHazelcastListenerAction

String

type of event - here added, updated, envicted and removed. Version 2.8

CamelHazelcastObjectId

String

the oid of the object Version 2.8

CamelHazelcastCacheName

String

the name of the cache - e.g. "foo" Version 2.8

CamelHazelcastCacheType

String

the type of the cache - here map Version 2.8

The object value will be stored within put and update actions inside the message body.

Here's a sample:

Usage of Multi Map

multimap cache producer - to("hazelcast:multimap:foo")

A multimap is a cache where you can store n values to one key. The multimap producer provides 4 operations (put, get, removevalue, delete).

Header Variables for the request message:

Name

Type

Description

hazelcast.operation.type

String

valid values are: put, get, removevalue, delete

hazelcast.objectId

String

the object id to store / find your object inside the cache

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastOperationType

String

valid values are: put, delete, get, update, query Available as of Camel 2.8

CamelHazelcastObjectId

String

the object id to store / find your object inside the cache (not needed for the query operation) Version 2.8

You can call the samples with:

Sample for put:

Java DSL:

Spring DSL:

Sample for get:

Java DSL:

Spring DSL:

Sample for update:

Java DSL:

Spring DSL:

Sample for delete:

Java DSL:

Spring DSL:

Sample for query

Java DSL:

Spring DSL:

For the query operation Hazelcast offers a SQL like syntax to query your distributed map.

map cache consumer - from("hazelcast:map:foo")

Hazelcast provides event listeners on their data grid. If you want to be notified if a cache will be manipulated, you can use the map consumer. There're 4 events: put, update, delete and envict. The event type will be stored in the "hazelcast.listener.action" header variable. The map consumer provides some additional information inside these variables:

Header Variables inside the response message:

Name

Type

Description

hazelcast.listener.time

Long

time of the event in millis

hazelcast.listener.type

String

the map consumer sets here "cachelistener"

hazelcast.listener.action

String

type of event - here added, updated, envicted and removed

hazelcast.objectId

String

the oid of the object

hazelcast.cache.name

String

the name of the cache - e.g. "foo"

hazelcast.cache.type

String

the type of the cache - here map

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastListenerTime

Long

time of the event in millis Version 2.8

CamelHazelcastListenerType

String

the map consumer sets here "cachelistener" Version 2.8

CamelHazelcastListenerAction

String

type of event - here added, updated, envicted and removed. Version 2.8

CamelHazelcastObjectId

String

the oid of the object Version 2.8

CamelHazelcastCacheName

String

the name of the cache - e.g. "foo" Version 2.8

CamelHazelcastCacheType

String

the type of the cache - here map Version 2.8

The object value will be stored within put and update actions inside the message body.

Here's a sample:

Usage of Multi Map

multimap cache producer - to("hazelcast:multimap:foo")

A multimap is a cache where you can store n values to one key. The multimap producer provides 4 operations (put, get, removevalue, delete).

Header Variables for the request message:

Name

Type

Description

hazelcast.operation.type

String

valid values are: put, get, removevalue, delete

hazelcast.objectId

String

the object id to store / find your object inside the cache

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastOperationType

String

valid values are: put, get, removevalue, delete Version 2.8

CamelHazelcastObjectId

String

the object id to store / find your object inside the cache Version 2.8

Sample for put:

Java DSL:

Spring DSL:

Sample for removevalue:

Java DSL:

Spring DSL:

To remove a value you have to provide the value you want to remove inside the message body. If you have a multimap object {key: "4711" values: { "my-foo", "my-bar"}} you have to put "my-foo" inside the message body to remove the "my-foo" value.

Sample for get:

Java DSL:

Spring DSL:

Sample for delete:

Java DSL:

Spring DSL:

you can call them in your test class with:

multimap cache consumer - from("hazelcast:multimap:foo")

For the multimap cache this component provides the same listeners / variables as for the map cache consumer (except the update and enviction listener). The only difference is the multimap prefix inside the URI. Here is a sample:

Header Variables inside the response message:

Name

Type

Description

hazelcast.listener.time

Long

time of the event in millis

hazelcast.listener.type

String

the map consumer sets here "cachelistener"

hazelcast.listener.action

String

type of event - here added and removed (and soon envicted)

hazelcast.objectId

String

the oid of the object

hazelcast.cache.name

String

the name of the cache - e.g. "foo"

hazelcast.cache.type

String

the type of the cache - here multimap

Eviction will be added as feature, soon (this is a Hazelcast issue).

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastListenerTime

Long

time of the event in millis Version 2.8

CamelHazelcastListenerType

String

the map consumer sets here "cachelistener" Version 2.8

CamelHazelcastListenerAction

String

type of event - here added and removed (and soon envicted) Version 2.8

CamelHazelcastObjectId

String

the oid of the object Version 2.8

CamelHazelcastCacheName

String

the name of the cache - e.g. "foo" Version 2.8

CamelHazelcastCacheType

String

the type of the cache - here multimap Version 2.8

Usage of Queue

Queue producer – to(“hazelcast:queue:foo”)

The queue producer provides 6 operations (add, put, poll, peek, offer, removevalue).

Sample for add:
Sample for put:
Sample for poll:
Sample for peek:
Sample for offer:
Sample for removevalue:

Queue consumer – from(“hazelcast:queue:foo”)

The queue consumer provides 2 operations (add, remove).

Usage of List

List producer – to(“hazelcast:list:foo”)

The list producer provides 4 operations (add, set, get, removevalue).

Sample for add:
Sample for get:
Sample for setvalue:
Sample for removevalue:
Icon

Please note that set,get and removevalue and not yet supported by hazelcast, will be added in the future..

List consumer – from(“hazelcast:list:foo”)

The list consumer provides 2 operations (add, remove).

Usage of SEDA

SEDA component differs from the rest components provided. It implements a work-queue in order to support asynchronous SEDA architectures, similar to the core "SEDA" component.

SEDA producer – to(“hazelcast:seda:foo”)

The SEDA producer provides no operations. You only send data to the specified queue.

Name

default value

Description

transferExchange

false

Camel 2.8.0: if set to true the whole Exchange will be transfered. If header or body contains not serializable objects, they will be skipped.

Java DSL :

Spring DSL :

SEDA consumer – from(“hazelcast:seda:foo”)

The SEDA consumer provides no operations. You only retrieve data from the specified queue.

Name

default value

Description

pollInterval

1000

How frequent to poll from the SEDA queue

concurrentConsumers

1

To use concurrent consumers polling from the SEDA queue.

transferExchange

false

Camel 2.8.0: if set to true the whole Exchange will be transfered. If header or body contains not serializable objects, they will be skipped.

transacted

false

Camel 2.10.4: if set to true then the consumer runs in transaction mode, where the messages in the seda queue will only be removed if the transaction commits, which happens when the processing is complete.

Java DSL :

Spring DSL:

Usage of Atomic Number

Icon

There is no consumer for this endpoint!

atomic number producer - to("hazelcast:atomicnumber:foo")

An atomic number is an object that simply provides a grid wide number (long). The operations for this producer are setvalue (set the number with a given value), get, increase (+1), decrease (-1) and destroy.

Header Variables for the request message:

Name

Type

Description

hazelcast.operation.type

String

valid values are: setvalue, get, increase, decrease, destroy

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastOperationType

String

valid values are: setvalue, get, increase, decrease, destroy Available as of Camel version 2.8

Sample for set:

Java DSL:

Spring DSL:

Provide the value to set inside the message body (here the value is 10): template.sendBody("direct:set", 10);

Sample for get:

Java DSL:

Spring DSL:

You can get the number with long body = template.requestBody("direct:get", null, Long.class);.

Sample for increment:

Java DSL:

Spring DSL:

The actual value (after increment) will be provided inside the message body.

Sample for decrement:

Java DSL:

Spring DSL:

The actual value (after decrement) will be provided inside the message body.

Sample for destroy
Icon

There's a bug inside Hazelcast. So this feature may not work properly. Will be fixed in 1.9.3.

Java DSL:

Spring DSL:

cluster support

Icon

This endpoint provides no producer!

instance consumer - from("hazelcast:instance:foo")

Hazelcast makes sense in one single "server node", but it's extremly powerful in a clustered environment. The instance consumer fires if a new cache instance will join or leave the cluster.

Here's a sample:

Each event provides the following information inside the message header:

Header Variables inside the response message:

Name

Type

Description

hazelcast.listener.time

Long

time of the event in millis

hazelcast.listener.type

String

the map consumer sets here "instancelistener"

hazelcast.listener.action

String

type of event - here added or removed

hazelcast.instance.host

String

host name of the instance

hazelcast.instance.port

Integer

port number of the instance

Icon

Header variables have changed in Camel 2.8

Name

Type

Description

CamelHazelcastListenerTime

Long

time of the event in millis Version 2.8

CamelHazelcastListenerType

String

the map consumer sets here "instancelistener" Version 2.8

CamelHazelcastListenerActionn

String

type of event - here added or removed. Version 2.8

CamelHazelcastInstanceHost

String

host name of the instance Version 2.8

CamelHazelcastInstancePort

Integer

port number of the instance Version 2.8

© 2004-2014 The Apache Software Foundation.
Apache Camel, Camel, Apache, the Apache feather logo, and the Apache Camel project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
Graphic Design By Hiram