You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Matthew Robson (JIRA)" <ji...@apache.org> on 2019/04/10 12:05:00 UTC

[jira] [Created] (ARTEMIS-2299) Using redelivery-delay and LastValueQueues is not defined and leads to queue blockage

Matthew Robson created ARTEMIS-2299:
---------------------------------------

             Summary: Using redelivery-delay and LastValueQueues is not defined and leads to queue blockage
                 Key: ARTEMIS-2299
                 URL: https://issues.apache.org/jira/browse/ARTEMIS-2299
             Project: ActiveMQ Artemis
          Issue Type: Bug
          Components: Broker
    Affects Versions: 2.7.0
            Reporter: Matthew Robson


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.

{code:java}
                    <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>
{code}

Test

{code:java}
@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();
}
{code}




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)