If you deploy a MDB with default setting (useDLQ=true, DLQMaxResent=5) and cause message redelivery , messages will stay as "delivering" state in the queue even after the message is delivered to DLQ. You can observe it through jmx-console (MessageCount, DeliveringCount).
In case that you use Ordering Group message introduced from JBM 1.4.0.SP3.CP08/1.4.4.GA, subsequent messages will be stuck in the queue and won't be processed.
I attached reproducer.zip
- unzip attached reproducer.zip
- modify
{jboss.home}
in build.xml
- ant dist
- ant deploy
- ant run
- check MessageCount and DeliveringCount of queue/A with jmx-console
- ant run
- check console(or server.log) that the second message is not recieved
According to Adrian's comment on JBAS-7465:
====
However, if the jms product already supports DLQ processing then you should disable
the DLQ processing in the MDB. i.e. useDLQ=false.
It is duplicate work and not as "reliable" as the jms product handling internally, e.g.
if the jms connection breaks between sending the message to the DLQ and ACKing the
dead message, you'll eventually end up with the message twice in the DLQ.
The feature only exists because JBossMQ did not have internal DLQ processing.
====
The defaults should be "useDLQ=false" for JBoss Messaging and in its document encourage users to use JBM settings instead.
- clones
-
JBPAPP-5537 Change the defaults to useDLQ=false for JBoss Messaging
- Closed
- is related to
-
JBAS-7601 Change the defaults to useDLQ=false for JBoss Messaging
- Closed
- relates to
-
JBAS-7465 Some issues with JCA's DLQ handling
- Closed