1 Reply Latest reply on Jul 25, 2008 9:24 AM by adrian.brock

    MaxDeliveryAttempts and RedeliveryDelay being ignored?

    daniel.gaiottino

      The following is on JBoss5-beta4.

      I'm currently working on a project where we send Objects to a purgatory queue if none of out services are available. The idea is that the messages will be kept here until the a suitable service is deployed again that can handle the message.

      Setting MaxDeliveryAttempts set to 10 and RedeliveryDelay set to 5000 for the queue "queue/jboss/purgatory" I expected the following:

      - ServiceManager notices there are no Services available and puts the object on the purgatory queue.
      - PurgatoryMDB picks up the message immediately and throws and Exception or does a Rollback to requeue the message for 5 seconds.
      - After 5 seconds PurgatoryMDB picks up the message again, checks with ServiceManager has a Service available now and if so passes it back to the ServiceManager. If not it is requeued again for 10 times before being sent to the DLQ.

      The queue config is

      <mbean code="org.jboss.jms.server.destination.QueueService"
       name="jboss.messaging.destination:service=Queue,name=purgatory"
       xmbean-dd="xmdesc/Queue-xmbean.xml">
      <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
       <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
       <depends>jboss.messaging:service=PostOffice</depends>
       <attribute name="JNDIName">queue/jboss/purgatory</attribute>
       <attribute name="MaxDeliveryAttempts">10</attribute>
       <attribute name="RedeliveryDelay">5000</attribute>
       </mbean>


      If I throw an EJBException from in the MDB to trigger the requeueing I see if being requeued and picked up immediately 5 times before it is sent to the DLQ.

      If I have
      @Resource
      private MessageDrivenContext context;
      and do
      context.setRollbackOnly();
      it is again requeued and picked up immediately and never gets put on the DLQ.

      The PurgatoryMDB is configured with
      @MessageDriven(activationConfig = {
       @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
       @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/jboss/purgatory") })
      


      What do I need to do to make JBoss5 use the attributes I have set in the queue configuration?