@Override public void addTail(final MessageReference ref) { addTail(ref, false); }
@Override public synchronized void addTail(final MessageReference ref, final boolean direct) { if (scheduleIfPossible(ref)) { return; } final SimpleString prop = ref.getLastValueProperty(); if (prop != null) { HolderReference hr = map.get(prop); if (hr != null) { // We need to overwrite the old ref with the new one and ack the old one replaceLVQMessage(ref, hr); } else { hr = new HolderReference(prop, ref); map.put(prop, hr); super.addTail(hr, direct); } } else { super.addTail(ref, direct); } }
@Override public void run() { if (first) { queue.addHead(messageReference, false); } else { queue.addTail(messageReference); } added = true; countDownLatch.countDown(); } }
logger.trace("Depaging reference " + reference + " on queue " + this.getName()); addTail(reference, false); pageIterator.remove();
@Test public void testMessagesAdded() throws Exception { QueueImpl queue = getTemporaryQueue(); MessageReference messageReference = generateReference(queue, 1); MessageReference messageReference2 = generateReference(queue, 2); MessageReference messageReference3 = generateReference(queue, 3); queue.addTail(messageReference); queue.addTail(messageReference2); queue.addTail(messageReference3); Assert.assertEquals(getMessagesAdded(queue), 3); }
@Test public void testIterator() { QueueImpl queue = getTemporaryQueue(); final int numMessages = 20; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); queue.addTail(ref); refs.add(ref); } Assert.assertEquals(numMessages, getMessageCount(queue)); Iterator<MessageReference> iterator = queue.iterator(); List<MessageReference> list = new ArrayList<>(); while (iterator.hasNext()) { list.add(iterator.next()); } assertRefListsIdenticalRefs(refs, list); }
@Test public void testRate() throws InterruptedException { QueueImpl queue = getTemporaryQueue(); final int numMessages = 10; for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); queue.addTail(ref); } Thread.sleep(1000); float rate = queue.getRate(); Assert.assertTrue(rate <= 10.0f); System.out.println("Rate: " + rate); }
@Test public void testResetMessagesAdded() throws Exception { QueueImpl queue = getTemporaryQueue(); MessageReference messageReference = generateReference(queue, 1); MessageReference messageReference2 = generateReference(queue, 2); queue.addTail(messageReference); queue.addTail(messageReference2); Assert.assertEquals(2, getMessagesAdded(queue)); queue.resetMessagesAdded(); Assert.assertEquals(0, getMessagesAdded(queue)); }
@Override public synchronized boolean changeReferencePriority(final long messageID, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); return true; } } return false; } }
@Override public synchronized int changeReferencesPriority(final Filter filter, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { int count = 0; while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { count++; iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); } } return count; } }
@Test public void testWithPriorities() throws Exception { QueueImpl queue = getTemporaryQueue(); final int numMessages = 10; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); ref.getMessage().setPriority((byte) i); refs.add(ref); queue.addTail(ref); } queue.deliverNow(); FakeConsumer consumer = new FakeConsumer(); queue.addConsumer(consumer); queue.deliverNow(); List<MessageReference> receivedRefs = consumer.getReferences(); // Should be in reverse order Assert.assertEquals(refs.size(), receivedRefs.size()); for (int i = 0; i < numMessages; i++) { Assert.assertEquals(refs.get(i), receivedRefs.get(9 - i)); } }
queue.addTail(ref);
@Test public void testMessageOrder() throws Exception { FakeConsumer consumer = new FakeConsumer(); QueueImpl queue = getTemporaryQueue(); MessageReference messageReference = generateReference(queue, 1); MessageReference messageReference2 = generateReference(queue, 2); MessageReference messageReference3 = generateReference(queue, 3); queue.addHead(messageReference, false); queue.addTail(messageReference2); queue.addHead(messageReference3, false); Assert.assertEquals(0, consumer.getReferences().size()); queue.addConsumer(consumer); queue.deliverNow(); Assert.assertEquals(3, consumer.getReferences().size()); Assert.assertEquals(messageReference3, consumer.getReferences().get(0)); Assert.assertEquals(messageReference, consumer.getReferences().get(1)); Assert.assertEquals(messageReference2, consumer.getReferences().get(2)); }
@Test public void testSimpleadd() { QueueImpl queue = getTemporaryQueue(); final int numMessages = 10; for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); queue.addTail(ref); } Assert.assertEquals(numMessages, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); }
MessageReference ref = generateReference(queue, i); refs.add(ref); queue.addTail(ref);
@Test public void testSimpleNonDirectDelivery() throws Exception { QueueImpl queue = getTemporaryQueue(); final int numMessages = 10; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); refs.add(ref); queue.addTail(ref); } Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); // Now add a consumer FakeConsumer consumer = new FakeConsumer(); queue.addConsumer(consumer); Assert.assertTrue(consumer.getReferences().isEmpty()); Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); queue.deliverNow(); assertRefListsIdenticalRefs(refs, consumer.getReferences()); Assert.assertEquals(numMessages, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(numMessages, queue.getDeliveringCount()); }
@Test public void testBusyConsumerWithFilterFirstCallBusy() throws Exception { QueueImpl queue = getTemporaryQueue(); FakeConsumer consumer = new FakeConsumer(FilterImpl.createFilter("color = 'green'")); consumer.setStatusImmediate(HandleStatus.BUSY); queue.addConsumer(consumer); final int numMessages = 10; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); ref.getMessage().putStringProperty("color", "green"); refs.add(ref); queue.addTail(ref); } Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); queue.deliverNow(); consumer.setStatusImmediate(null); queue.deliverNow(); List<MessageReference> receeivedRefs = consumer.getReferences(); int currId = 0; for (MessageReference receeivedRef : receeivedRefs) { Assert.assertEquals("messages received out of order", receeivedRef.getMessage().getMessageID(), currId++); } }
@Test public void testBusyConsumer() throws Exception { QueueImpl queue = getTemporaryQueue(); FakeConsumer consumer = new FakeConsumer(); consumer.setStatusImmediate(HandleStatus.BUSY); queue.addConsumer(consumer); final int numMessages = 10; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); refs.add(ref); queue.addTail(ref); } Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); queue.deliverNow(); Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertTrue(consumer.getReferences().isEmpty()); consumer.setStatusImmediate(HandleStatus.HANDLED); queue.deliverNow(); assertRefListsIdenticalRefs(refs, consumer.getReferences()); Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(10, queue.getDeliveringCount()); }