The ConsumerTemplate interface allows you to receive message exchanges from endpoints in a variety of different ways to make it easy to work with Camel Endpoint instances from Java code.

It can be configured with a default endpoint if you just want to receive lots of messages to the same endpoint; or you can specify an Endpoint or uri as the first parameter.

The receiveBody() method allows you to receive any object to an endpoint easily as shown:

ConsumerTemplate template = exchange.getContext().createConsumerTemplate();

// recieve from default endpoint
Object body = template.receiveBody();

// receive from a specific queue
body = template.receiveBody("activemq:MyQueue");

Receive modes

The consumer template operates in three modes:

  • receive - Consumes from the endpoint, waiting until there is a message (can potentially wait for a long time!).

  • receiveNoWait - Consumes from endpoint, not waiting for a message if none exists.

  • receiveTimeout - Consumes from the endpoint, waiting until there is a response, or the timeout occurs.

In the previous examples then it was the first mode we used (receiveBody). For example if there are no messages on the activemq:MyQueue then Camel would wait until a message is sent to this queue.

Often you dont want to wait forever so its often a good idea to use a timeout value, such as 5 seconds:

ConsumerTemplate template = exchange.getContext().createConsumerTemplate();

// receive from a specific queue
body = template.receiveBody("activemq:MyQueue", 5000);

Here we wait at most 5 seconds for a message to be consumed, if there was no message, then null is returned as response.

See Also