Can someone please confirm what my colleague has observed on our project (NB:
We use Camel 2.8.5).

Let us take for instance:
- a JMS consumer (with a particular value of "maxConcurrentConsumers")
- a (non transacted) error handler with the following redelivery policy:
   * a large number of retries (ex: 20)
   * a significant amount of times between 2 attempts (ex: 5 sec)
   * useExponentialBackOff=true + backOffMultiplier

So, in the worst situation, the complete retry process (for a single
exchange) will take a very a long time:
20 attempts x (at least 5) sec =  more than 100 sec

During the time (>100 sec) Camel is busy with the processing of this single
exchange, we may of course receive many items in the JMS queue.

What we have observed, is that the JMS consumer is staying busy and does NOT
release its jms session until a successful attempt. In my example, a jms
consumer will hold the connection for 100 sec, even while sleeping between 2
attempts ! Needless to say that, in case of "burst" on the producer side,
there could be rapidly no more enough free consumers...

I do not understand why (in a non transacted route) Camel does not
immediately release its jms session.
Is it a wanted behaviour (and also a good practice) to keep holding the JMS
connection till the end of the processing of the exchange ?
If we decide for instance to wait 60 sec between 2 attempts, I would like
for instance to pause/free my jms consumer so that he can serve other
potential messages present in my queue.




 



--
View this message in context: 
http://camel.465427.n5.nabble.com/Risk-of-JMS-flooding-with-long-lasted-redelivery-policy-tp5736707.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to