1 Reply Latest reply on Feb 8, 2012 10:32 PM by sharma.amits

    Server side (MaxDeliveryAttempts) vs Client-Side (DLQMaxRese

    Sheldon Bainwohl Newbie

      After successfully configuring a custom destination (so I thought) with the following customization(s) ...

      <mbean code="org.jboss.jms.server.destination.QueueService"
      name="jboss.messaging.destination:service=Queue,name=prototype_PacketResendQ"
      xmbean-dd="xmdesc/Queue-xmbean.xml">

      jboss.messaging.destination:service=Queue,name=prototype_DLQ
      jboss.messaging.destination:service=Queue,name=prototype_ExpiryQ

      <!-- Redelivery delay (defaults to 10min=10*60*1000ms if not set -->
      ${config.dest.prototype_PacketResendQ.RedeliveryDelayInMs:600000}

      <!-- The maximum times a message is nacked before a -->
      <!-- message is sent to the Dead Letter Queue -->
      <!-- -->
      <!-- 0 - don't redeliver -->
      <!-- n - redeliver n times -->
      <!-- -1 - continue redelivering indefinitely -->
      1000

      <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer
      jboss.messaging:service=PostOffice
      ... etc...

      I observed that the custom RedeliveryDelay setting was working great, but the MaxDeliveryAttempts setting was being ignored ... messages were always sent to the DLQ on the 6th attempt:

      ([AbstractDLQHandler] Message redelivered=6 max=5 sending it to the dlq delegator->JBossMessage[20364378959495170]:NON-PERSISTENT, deliveryId=6 ...)

      Also, the message was being sent to the default DLQ, rather than my custom prototype_DLQ.

      Eventually, I was able to resolve the issue via client side configuration. More specifically, I can get the desired effect of MaxDeliveryAttempts and DLQ via ActivationConfigProperty(s) against the MDB (DLQMaxResent,DLQJNDIName).

      @ActivationConfigProperty(propertyName="DLQMaxResent",propertyValue="50000"),
      @ActivationConfigProperty(propertyName="DLQJNDIName",propertyValue="queue/prototype_DLQ")

      Unfortunately, while the MaxDeliveryAttempts does support -1 (redelivery forever), the DQLMaxResent does not!

      I'd really like to configure the destination, rather that the MDB listening on that destination. In otherwords, eliminate the need for the ActivationConfigProperty(s) DLQMaxResent and DLQJNDIName.

      How can I do this ... obviously there's some default DLQMaxResent=5 setting which is overriding my MaxDeliveryAttempts setting; likewise for the specification of a custom DLQ.

      Any assistance would be appreciated ... cheers.