Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.7.0
-
None
-
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
- links to