diff --git a/src/main/org/hornetq/core/server/impl/QueueImpl.java b/src/main/org/hornetq/core/server/impl/QueueImpl.java index fbe719176c8..7b3a9196fdd 100644 --- a/src/main/org/hornetq/core/server/impl/QueueImpl.java +++ b/src/main/org/hornetq/core/server/impl/QueueImpl.java @@ -2093,6 +2093,7 @@ private void sendToDeadLetterAddress(final MessageReference ref, final SimpleSt { QueueImpl.log.warn("Message " + ref + " has exceeded max delivery attempts. No bindings for Dead Letter Address " + deadLetterAddress + " so dropping it"); + acknowledge(ref); } else { diff --git a/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java b/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java index 5ef7be56f0b..007d69c84dd 100644 --- a/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java +++ b/tests/src/org/hornetq/tests/integration/client/DeadLetterAddressTest.java @@ -83,6 +83,35 @@ public void testBasicSend() throws Exception Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); } + // HORNETQ- 1084 + public void testBasicSendWithDLAButNoBinding() throws Exception + { + SimpleString dla = new SimpleString("DLA"); + SimpleString qName = new SimpleString("q1"); + AddressSettings addressSettings = new AddressSettings(); + addressSettings.setMaxDeliveryAttempts(1); + addressSettings.setDeadLetterAddress(dla); + server.getAddressSettingsRepository().addMatch(qName.toString(), addressSettings); + //SimpleString dlq = new SimpleString("DLQ1"); + //clientSession.createQueue(dla, dlq, null, false); + clientSession.createQueue(qName, qName, null, false); + ClientProducer producer = clientSession.createProducer(qName); + producer.send(createTextMessage(clientSession, "heyho!")); + clientSession.start(); + ClientConsumer clientConsumer = clientSession.createConsumer(qName); + ClientMessage m = clientConsumer.receive(500); + m.acknowledge(); + Assert.assertNotNull(m); + Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); + // force a cancel + clientSession.rollback(); + m = clientConsumer.receiveImmediate(); + Assert.assertNull(m); + clientConsumer.close(); + Queue q = (Queue)server.getPostOffice().getBinding(qName).getBindable(); + Assert.assertEquals(0, q.getDeliveringCount()); + } + public void testBasicSend2times() throws Exception { SimpleString dla = new SimpleString("DLA");