...
The ConsumerTemplate
(discussed below) is also available.
There are 3 three main polling methods on PollingConsumer
...
Div |
---|
class | confluenceTableSmall |
---|
|
Option | Default | Description |
---|
backoffErrorThreshold
| 0
| Camel 2.12: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. | backoffIdleThreshold
| 0
| Camel 2.12: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. | backoffMultiplier
| 0
| 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 backoffIdleThreshold and/or backoffErrorThreshold must also be configured. | delay
| 500
| Milliseconds before the next poll. | greedy
| false
| Camel 2.10.6/2.11.1: If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | initialDelay
| 1000
| Milliseconds before the first poll starts. | pollStrategy
| | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange has been created and routed in Camel. In other words the error occurred while the polling was gathering information, for instance access to a file network failed so Camel cannot access it to scan for files. The default implementation will log the caused exception at WARN level and ignore it. | runLoggingLevel
| TRACE
| 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. | scheduledExecutorService
| null
| 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. | scheduler
| null
| Camel 2.12: Allow to plugin a custom org.apache.camel.spi.ScheduledPollConsumerScheduler to use as the scheduler for firing when the polling consumer runs. The default implementation uses the ScheduledExecutorService and there is a Quartz2, and Spring based which supports CRON expressions. Notice: If using a custom scheduler then the options for initialDelay , useFixedDelay , timeUnit and scheduledExecutorService may not be in use. Use the text quartz2 to refer to use the Quartz2 scheduler; and use the text spring to use the Spring based; and use the text #myScheduler to refer to a custom scheduler by its id in the Registry. See Quartz2 page for an example. | scheduler.xxx
| null
| Camel 2.12: To configure additional properties when using a custom scheduler or any of the Quartz2, Spring based scheduler. | sendEmptyMessageWhenIdle
| false
| 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. | startScheduler
| true
| Whether the scheduler should be auto started. | timeUnit
| TimeUnit.MILLISECONDS
| Time unit for initialDelay and delay options. | useFixedDelay
| | 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 false . From Camel 2.8: the default value is true . |
|
Using backoff
to
...
Let the Scheduler be Less Aggressive
Available as of Camel 2.12
...
Camel will log at DEBUG
level using org.apache.camel.impl.ScheduledPollConsumer
when back-off is kicking-in.
About
...
Error Handling and Scheduled Polling Consumers
ScheduledPollConsumer is scheduled based and its run
method is invoked periodically based on schedule settings. But errors can also occur when a poll is being executed. For instance if Camel should poll a file network, and this network resource is not available then a java.io.IOException
could occur. As this error happens before any Exchange has been created and prepared for routing, then the regular Error handling in Camel does not apply. So what does the consumer do then? Well the exception is propagated back to the run
method where its handled. Camel will by default log the exception at WARN
level and then ignore it. At next schedule the error could have been resolved and thus being able to poll the endpoint successfully.
Using a
...
Custom Scheduler
Available as of Camel 2.12:
...
The strategy interface provides the following 3 three methods:
begin
void begin(Consumer consumer, Endpoint endpoint)
begin
(Camel 2.3)boolean begin(Consumer consumer, Endpoint endpoint)
commit
void commit(Consumer consumer, Endpoint endpoint)
commit
(Camel 2.6)void commit(Consumer consumer, Endpoint endpoint, int polledMessages)
rollback
boolean rollback(Consumer consumer, Endpoint endpoint, int retryCounter, Exception e) throws Exception
...
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 3 three times:
Code Block |
---|
|
public boolean rollback(Consumer consumer, Endpoint endpoint, int retryCounter, Exception e) throws Exception {
if (retryCounter < 3) {
// return true to tell Camel that it should retry the poll immediately
return true;
}
// okay we give up do not retry anymore
return false;
} |
...
Code Block |
---|
|
// error occurred lets restart the consumer, that could maybe resolve the issue
consumer.stop();
consumer.start();
|
NoticeNote: 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
:
Code Block |
---|
from("file://inbox/?pollStrategy=#myPoll")
.to("activemq:queue:inbox")
|
...