Polling ConsumerPage edited by Claus IbsenChanges (2)
Full ContentPolling ConsumerCamel supports implementing the Polling Consumer from the EIP patterns using the PollingConsumer interface which can be created via the Endpoint.createPollingConsumer() method. So in your Java code you can do
Endpoint endpoint = context.getEndpoint("activemq:my.queue");
PollingConsumer consumer = endpoint.createPollingConsumer();
Exchange exchange = consumer.receive();
ScheduledPollConsumer OptionsThe ScheduledPollConsumer supports the following options:
About error handling and scheduled polling consumersScheduledPollConsumer 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. Controlling the error handling using PollingConsumerPollStrategyorg.apache.camel.PollingConsumerPollStrategy is a pluggable strategy that you can configure on the ScheduledPollConsumer. The default implementation org.apache.camel.impl.DefaultPollingConsumerPollStrategy will log the caused exception at WARN level and then ignore this issue. The strategy interface provides the following 3 methods
In Camel 2.3 onwards the begin method returns a boolean which indicates whether or not to skipping polling. So you can implement your custom logic and return false if you do not want to poll this time. In Camel 2.6 onwards the commit method has an additional parameter containing the number of message that was actually polled. For example if there was no messages polled, the value would be zero, and you can react accordingly. The most interesting is the rollback as it allows you do handle the caused exception and decide what to do. 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 times:
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;
}
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:
// error occurred lets restart the consumer, that could maybe resolve the issue
consumer.stop();
consumer.start();
Notice: 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. Configuring an Endpoint to use PollingConsumerPollStrategyTo 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:
from("file://inbox/?pollStrategy=#myPoll").to("activemq:queue:inbox")
Using This PatternIf you would like to use this EIP Pattern then please read the Getting Started, you may also find the Architecture useful particularly the description of Endpoint and URIs. Then you could try out some of the Examples first before trying this pattern out. See Also
Stop watching space
|
Change email notification preferences
View Online
|
View Changes
|
Add Comment
|
- [CONF] Apache Camel > Polling Consumer Claus Ibsen (Confluence)
- [CONF] Apache Camel > Polling Consumer Claus Ibsen (Confluence)
- [CONF] Apache Camel > Polling Consumer Claus Ibsen (Confluence)
- [CONF] Apache Camel > Polling Consumer Claus Ibsen (Confluence)
