...
Camel supports implementing the Polling Consumer from the EIP patterns using the PollingConsumer interface which can be created via the Endpoint.createPollingConsumer() method.
In Java:
...
The ConsumerTemplate
(discussed below) is also available.
...
Option | Default | Description |
---|---|---|
|
| Camel 2.14/2.13.1/2.12.4: The queue size for the internal hand-off queue between the polling consumer, and producers sending data into the queue. |
|
| Camel 2.14/2.13.1/2.12/4: Whether to block any producer if the internal queue is full. |
pollingConsumerBlockTimeout | 0 | Camel 2.16: To use a timeout (in milliseconds) when the producer is blocked if the internal queue is full. If the value is 0 or negative then no timeout is in use. If a timeout is triggered then a ExchangeTimedOutException is thrown. |
...
You can configure these options in endpoints URIs, such as shown below:
...
ConsumerTemplate
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 three operations listed above. However, it also includes convenient methods for returning the body, etc consumeBody
.
Example:
...
...
Or to extract and get the body you can do:
...
And you can provide the body type as a parameter and have it returned as the type:
...
...
You get hold of a ConsumerTemplate
from the CamelContext
with the createConsumerTemplate
operation:
...
Using ConsumerTemplate with Spring DSL
With the Spring DSL we can declare the consumer in the CamelContext
with the consumerTemplate
tag, just like the ProducerTemplate
. The example below illustrates this: Wiki Markup 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. Wiki Markup
Timer Based Polling Consumer
...
First we setup our route as: Wiki Markup Wiki Markup
Scheduled Poll Components
...
Option | Default | Description |
---|---|---|
|
| Camel 2.12: The number of subsequent error polls (failed due some error) that should happen before the |
|
| Camel 2.12: The number of subsequent idle polls that should happen before the |
|
| Camel 2.12: To let the scheduled polling consumer back-off if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then |
|
| Milliseconds before the next poll. |
|
| Camel 2.10.6/2.11.1: If greedy is enabled, then the |
|
| Milliseconds before the first poll starts. |
| A pluggable The default implementation will log the caused exception at | |
|
| Camel 2.8: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. |
|
| Camel 2.10: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. This option allows you to share a thread pool among multiple consumers. |
|
| Camel 2.12: Allow to plugin a custom See Quartz2 page for an example. |
|
| Camel 2.12: To configure additional properties when using a custom |
|
| Camel 2.9: If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. |
|
| Whether the scheduler should be auto started. |
|
| Time unit for |
|
| Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. In Camel 2.7.x or older the default value is From Camel 2.8: the default value is |
...
For example to let a FTP consumer back-off if its becoming idle for a while you can do:
...
...
In this example, the FTP consumer will poll for new FTP files every 5th second. But if it has been idle for 5 attempts in a row, then it will back-off using a multiplier of 6, which means it will now poll every 5 x 6 = 30th second instead. When the consumer eventually pickup a file, then the back-off will reset, and the consumer will go back and poll every 5th second again.
...
For instance if we want to provide a retry feature to a scheduled consumer we can implement the PollingConsumerPollStrategy
method and put the retry logic in the rollback
method. Lets just retry up till three times:
...
...
Notice that we are given the Consumer
as a parameter. We could use this to restart the consumer as we can invoke stop and start:
...
Note: if you implement the begin
operation make sure to avoid throwing exceptions as in such a case the poll
operation is not invoked and Camel will invoke the rollback
directly.
...
To configure an Endpoint to use a custom PollingConsumerPollStrategy
you use the option pollStrategy
. For example in the file consumer below we want to use our custom strategy defined in the Registry with the bean id myPoll
:
...
...
Using This PatternUsing This Pattern Include Page