Uploaded image for project: 'ActiveMQ Artemis'
  1. ActiveMQ Artemis
  2. ARTEMIS-2299

Using redelivery-delay and LastValueQueues is not defined and leads to queue blockage

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.7.0
    • None
    • Broker
    • None

    Description

      Setting last-value-queue with redelivery options has no implemented logic. No retry occurs and ultimately the queue becomes blocked for on consumptions for all subsequent messages.

                          <address-setting match="jms.queue.TestQueue">
                              <dead-letter-address>jms.queue.DLQ2</dead-letter-address>
                              <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                              <redelivery-delay>1000</redelivery-delay>
                              <max-delivery-attempts>50</max-delivery-attempts>
                              <max-size-bytes>10485760</max-size-bytes>
                              <page-size-bytes>2097152</page-size-bytes>
                              <address-full-policy>PAGE</address-full-policy>
                              <message-counter-history-day-limit>10</message-counter-history-day-limit>
                              <last-value-queue>true</last-value-queue>
                              <redistribution-delay>1000</redistribution-delay>
                          </address-setting>
      

      Test

      @Test
      public void testMultipleRollback() throws Exception
      {
         AddressSettings qs = new AddressSettings();
         qs.setLastValueQueue(true);
         qs.setRedeliveryDelay(100);
         server.getAddressSettingsRepository().addMatch(address.toString(), qs);
      
         ClientProducer producer = clientSessionTxReceives.createProducer(address);
         ClientConsumer consumer = clientSessionTxReceives.createConsumer(qName1);
         SimpleString messageId1 = new SimpleString("SMID1");
         ClientMessage m1 = createTextMessage(clientSession, "m1");
         m1.putStringProperty(Message.HDR_LAST_VALUE_NAME, messageId1);
         producer.send(m1);
         clientSessionTxReceives.start();
         for (int i  = 0; i < 10; i++)
         {
            ClientMessage m = consumer.receive(5000);
            Assert.assertNotNull(m);
            m.acknowledge();
            clientSessionTxReceives.rollback();
         }
         m1 = createTextMessage(clientSession, "m1");
         m1.putStringProperty(Message.HDR_LAST_VALUE_NAME, messageId1);
         producer.send(m1);
         ClientMessage m = consumer.receive(1000);
         Assert.assertNotNull(m);
         m.acknowledge();
         Assert.assertEquals(m.getBodyBuffer().readString(), "m1");
         Assert.assertNull(consumer.receiveImmediate());
         clientSessionTxReceives.commit();
      }
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              mrobson Matthew Robson
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m