that is expected. The intent is to preserver message order.

have a peek at the discussion and solutions (that allow order to be ignored) in:

https://issues.apache.org/jira/browse/AMQ-1853
https://issues.apache.org/jira/browse/AMQ-3894

Doco  at: http://activemq.apache.org/message-redelivery-and-dlq-handling.html

On 8 October 2012 19:21, vlasmarias <vlasmar...@hotmail.com> wrote:
> I seem to be seeing something entirely unexpected - when my JmsConsumer
> thread throw a SchedulerException, that JmsConsumer thread will not process
> any new message until it has finished processing the original ActiveMQ
> message. I was expecting that having a delay would mean that that
> JmsConsumer thread will now be free to process another ActiveMQ message.
>
> Here's my setup:
>
> 1) I have a whole slew of ActiveMQ messages in my queue.
>
> 2) I have the following camel configuration:
>
>         <camel:camelContext>
>                 <camel:errorHandler id="defaultErrorHandler" 
> type="DefaultErrorHandler">
>                         <camel:redeliveryPolicy maximumRedeliveries="90" 
> redeliveryDelay="10000"
> logStackTrace="false"/>
>                 </camel:errorHandler>
>
>                 <camel:route errorHandlerRef="defaultErrorHandler">
>                         <camel:from
> uri="activemq:queue:actionRequestQueue?concurrentConsumers=15" />
>                         <camel:bean ref="actionRequestService" 
> method="processActionRequest" />
>                 </camel:route>
>
> 3) In my processActionRequest code, I print the id's which uniquely identify
> the ActiveMQ message and then throw a SchedulerException to force a
> rollback:
>
>         log.debug("finding QuartzNextfire by senId:" + senId);
>         String errorMsg = "Not yet my turn. beacon_id=" + beaconId + " 
> sen_id=" +
> senId + " command=" + command;
>         throw new SchedulerException(errorMsg);
>
> 4) What I see is that even though there are a lot of other ActiveMQ messes
> to process, thread #1 keeps processing senId=13623 and thread # 2 keeps
> processing senId=13622 until the maximumRedeliveries is reached:
>
> $ grep "finding QuartzNextfire" scenario.log.2012-10-07-15 | more
> 2012-10-07 15:00:02,914 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13623 Camel (camel-1) thread #1 - JmsConsumer[actionRequestQueue
> 2012-10-07 15:00:02,916 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13622 Camel (camel-1) thread #0 - JmsConsumer[actionRequestQueue
> 2012-10-07 15:00:12,924 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13623 Camel (camel-1) thread #1 - JmsConsumer[actionRequestQueue
> 2012-10-07 15:00:12,927 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13622 Camel (camel-1) thread #0 - JmsConsumer[actionRequestQueue
> 2012-10-07 15:00:22,936 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13623 Camel (camel-1) thread #1 - JmsConsumer[actionRequestQueue
> 2012-10-07 15:00:22,937 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13622 Camel (camel-1) thread #0 - JmsConsumer[actionRequestQueue
> 2012-10-07 15:00:32,947 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13623 Camel (camel-1) thread #1 - JmsConsumer[actionRequestQueue
> 2012-10-07 15:00:32,948 DEBUG [QuartzNextfireHome] finding QuartzNextfire by
> senId:13622 Camel (camel-1) thread #0 - JmsConsumer[actionRequestQueue
> (...)
>
> How can I free up those JmsConsumer threads to process the other ActiveMQ
> messages in the queue during the deliveryTimeout?
>
> Thanks in advance.
>
>
>
> --
> View this message in context: 
> http://activemq.2283324.n4.nabble.com/After-rollback-JMSConsumer-is-not-freed-up-to-process-other-messages-tp4657621.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.



-- 
http://redhat.com
http://blog.garytully.com

Reply via email to