...
Code Block |
---|
Endpoint endpoint = context.getEndpoint("activemq:my.queue"); PollingConsumer consumer = endpoint.createPollingConsumer(); Exchange exchange = consumer.receive(); |
Notice in Camel 2.0 we have introduced the ConsumerTemplate
.
There are 3 main polling methods on PollingConsumer
Method name | Description |
---|---|
Waits until a message is available and then returns it; potentially blocking forever | |
Attempts to receive a message exchange, waiting up to the given timeout and returning null if no message exchange could be received within the time available | |
Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet |
ConsumerTemplate
Available as of Camel 2.0
The ConsumerTemplate
is a template much like Spring's JmsTemplate or JdbcTemplate supporting the Polling Consumer EIP. With the template you can consume Exchanges from an Endpoint.
The template supports the 3 operations above, but also including convenient methods for returning the body, etc consumeBody
.
The example from above using ConsumerTemplate is:
Code Block |
---|
Exchange exchange = consumerTemplate.receive("activemq:my.queue");
|
Or to extract and get the body you can do:
Code Block |
---|
Object body = consumerTemplate.receiveBody("activemq:my.queue");
|
And you can provide the body type as a parameter and have it returned as the type:
Code Block |
---|
String body = consumerTemplate.receiveBody("activemq:my.queue", String.class);
|
You get hold of a ConsumerTemplate
from the CamelContext
with the createConsumerTemplate
operation:
Code Block |
---|
ConsumerTemplate consumer = context.createConsumerTemplate();
|
Using ConsumerTemplate with Spring DSL
With the Spring DSL we can declare the consumer in the CamelContext, just like the ProducerTemplate. The example below illustrates this:
TODO: e1
Then we can get leverage Spring to inject the ConsumerTemplate
in our java class. The code below is part of an unit test but it shows how the consumer and producer can work together.
TODO: e1, SpringConsumerTemplateTest.java
TODO: Create a JMS sample with a timer to poll a JMS queue every 5th sec.
Scheduled Poll Components
Quite a few inbound Camel endpoints use a scheduled poll pattern to receive messages and push them through the Camel processing routes. That is to say externally from the client the endpoint appears to use an Event Driven Consumer but internally a scheduled poll is used to monitor some kind of state or resource and then fire message exchanges.
...