@Override public void route(final Message message, final RoutingContext context) throws Exception { if (purgeOnNoConsumers) { context.setReusable(false); if (getConsumerCount() == 0) { return; } } context.addQueue(address, this); }
void postRollback(final LinkedList<MessageReference> refs) { //if we have purged then ignore adding the messages back if (purgeOnNoConsumers && getConsumerCount() == 0) { purgeAfterRollback(refs); return; } addHead(refs, false); }
@Test public void testAddRemoveConsumer() throws Exception { Consumer cons1 = new FakeConsumer(); Consumer cons2 = new FakeConsumer(); Consumer cons3 = new FakeConsumer(); QueueImpl queue = getTemporaryQueue(); Assert.assertEquals(0, queue.getConsumerCount()); queue.addConsumer(cons1); Assert.assertEquals(1, queue.getConsumerCount()); queue.removeConsumer(cons1); Assert.assertEquals(0, queue.getConsumerCount()); queue.addConsumer(cons1); queue.addConsumer(cons2); queue.addConsumer(cons3); Assert.assertEquals(3, queue.getConsumerCount()); queue.removeConsumer(new FakeConsumer()); Assert.assertEquals(3, queue.getConsumerCount()); queue.removeConsumer(cons1); Assert.assertEquals(2, queue.getConsumerCount()); queue.removeConsumer(cons2); Assert.assertEquals(1, queue.getConsumerCount()); queue.removeConsumer(cons3); Assert.assertEquals(0, queue.getConsumerCount()); queue.removeConsumer(cons3); }
float queueRate = getRate(); if (logger.isDebugEnabled()) { logger.debug(getAddress() + ":" + getName() + " has " + getConsumerCount() + " consumer(s) and is receiving messages at a rate of " + queueRate + " msgs/second."); TypedProperties props = new TypedProperties(); props.putIntProperty(ManagementHelper.HDR_CONSUMER_COUNT, getConsumerCount());
@Test(timeout = 60000) public void testConsumeFromSingleQueueOnAddressSameNameMultipleQueues() throws Exception { server.addAddressInfo(new AddressInfo(address, RoutingType.ANYCAST)); server.createQueue(address, RoutingType.ANYCAST, queue1, null, true, false); server.createQueue(address, RoutingType.ANYCAST, address, null, true, false); sendMessages(address.toString(), 2); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString()); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(address).getBindable()).getConsumerCount()); assertEquals(0, ((QueueImpl)server.getPostOffice().getBinding(queue1).getBindable()).getConsumerCount()); receiver.close(); connection.close(); }
@Test(timeout = 60000) public void testConsumeFromSingleQueueOnAddressDifferentNameMultipleQueues() throws Exception { server.addAddressInfo(new AddressInfo(address, RoutingType.ANYCAST)); server.createQueue(address, RoutingType.ANYCAST, queue1, null, true, false); server.createQueue(address, RoutingType.ANYCAST, queue2, null, true, false); sendMessages(address.toString(), 1); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString()); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(queue1).getBindable()).getConsumerCount()); assertEquals(0, ((QueueImpl)server.getPostOffice().getBinding(queue2).getBindable()).getConsumerCount()); receiver.close(); connection.close(); }
@Test(timeout = 60000) public void testConsumeFromSingleQueueOnAddressSameName() throws Exception { AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString()); sendMessages(address.toString(), 1); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(address).getBindable()).getConsumerCount()); receiver.close(); connection.close(); } }
@Test(timeout = 60000) public void testConsumeFromSingleQueueOnAddressSameName() throws Exception { server.addAddressInfo(new AddressInfo(address, RoutingType.ANYCAST)); server.createQueue(address, RoutingType.ANYCAST, address, null, true, false); sendMessages(address.toString(), 1); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString()); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(address).getBindable()).getConsumerCount()); receiver.close(); connection.close(); }
@Test(timeout = 60000) public void testConsumeFromSingleQualifiedQueueOnAddressSameName() throws Exception { server.addAddressInfo(new AddressInfo(address, RoutingType.ANYCAST)); server.createQueue(address, RoutingType.ANYCAST, queue1, null, true, false); sendMessages(address.toString(), 1); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString() + "::" + queue1.toString()); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(queue1).getBindable()).getConsumerCount()); receiver.close(); connection.close(); }
@Test(timeout = 60000) public void testConsumeFromSingleQueueOnAddressDifferentName() throws Exception { server.addAddressInfo(new AddressInfo(address, RoutingType.ANYCAST)); server.createQueue(address, RoutingType.ANYCAST, queue1, null, true, false); sendMessages(address.toString(), 1); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString()); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(queue1).getBindable()).getConsumerCount()); receiver.close(); connection.close(); }
@Test(timeout = 60000) public void testConsumeFromSingleQueueOnAddressSameName() throws Exception { server.addAddressInfo(new AddressInfo(address, RoutingType.MULTICAST)); server.createQueue(address, RoutingType.MULTICAST, address, null, true, false); sendMessages(address.toString(), 1); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString() + "::" + address.toString()); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(address).getBindable()).getConsumerCount()); receiver.close(); connection.close(); }
@Test(timeout = 60000) public void test2ConsumersOnSharedVolatileAddressNoReceiverClose() throws Exception { AddressInfo addressInfo = new AddressInfo(address); addressInfo.getRoutingTypes().add(RoutingType.MULTICAST); server.addAddressInfo(addressInfo); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect("myClientId")); AmqpSession session = connection.createSession(); Source source = createSharedSource(TerminusDurability.NONE); AmqpReceiver receiver = session.createMulticastReceiver(source, "myReceiverID", "mySub"); AmqpReceiver receiver2 = session.createMulticastReceiver(source, "myReceiverID", "mySub|2"); receiver.flow(1); receiver2.flow(1); sendMessages(address.toString(), 2); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile")).getBindable()).getConsumerCount()); assertNotNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile"))); //check its been deleted connection.close(); Wait.waitFor(new Wait.Condition() { @Override public boolean isSatisfied() throws Exception { return server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile")) == null; } }, 1000); }
@Test(timeout = 60000) public void testConsumeWhenNoAddressCreatedAutoCreate() throws Exception { // This test needs auto-create.. for that just clear the settings and use defaults server.getAddressSettingsRepository().clear(); AddressSettings settings = new AddressSettings(); settings.setAutoCreateAddresses(true); server.getAddressSettingsRepository().addMatch(address.toString(), settings); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect()); AmqpSession session = connection.createSession(); AmqpReceiver receiver = session.createReceiver(address.toString()); sendMessages(address.toString(), 1); receiver.flow(1); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(1, ((QueueImpl)server.getPostOffice().getBinding(address).getBindable()).getConsumerCount()); connection.close(); }
amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile")).getBindable()).getConsumerCount()); receiver.close(); assertNotNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile")));
amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("mySub:shared-volatile:global")).getBindable()).getConsumerCount()); receiver.close(); assertNotNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("mySub:shared-volatile:global")));
@Test(timeout = 60000) public void test2ConsumersOnSharedDurableAddressGlobal() throws Exception { AddressInfo addressInfo = new AddressInfo(address); addressInfo.getRoutingTypes().add(RoutingType.MULTICAST); server.addAddressInfo(addressInfo); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect(false)); AmqpSession session = connection.createSession(); Source source = createSharedGlobalSource(TerminusDurability.CONFIGURATION); AmqpReceiver receiver = session.createMulticastReceiver(source, "myReceiverID", "mySub"); AmqpReceiver receiver2 = session.createMulticastReceiver(source, "myReceiverID", "mySub|2"); receiver.flow(1); receiver2.flow(1); sendMessages(address.toString(), 2); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("mySub:global")).getBindable()).getConsumerCount()); receiver.close(); assertNotNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("mySub:global"))); receiver2.close(); //check its been deleted assertNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("mySub:global"))); connection.close(); }
@Test(timeout = 60000) public void test2ConsumersOnSharedDurableAddress() throws Exception { AddressInfo addressInfo = new AddressInfo(address); addressInfo.getRoutingTypes().add(RoutingType.MULTICAST); server.addAddressInfo(addressInfo); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect("myClientId")); AmqpSession session = connection.createSession(); Source source = createSharedSource(TerminusDurability.CONFIGURATION); AmqpReceiver receiver = session.createMulticastReceiver(source, "myReceiverID", "mySub"); AmqpReceiver receiver2 = session.createMulticastReceiver(source, "myReceiverID", "mySub|2"); receiver.flow(1); receiver2.flow(1); sendMessages(address.toString(), 2); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub")).getBindable()).getConsumerCount()); receiver.close(); assertNotNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub"))); receiver2.close(); //check its been deleted assertNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub"))); connection.close(); }
@Test(timeout = 60000) public void test2ConsumersOnSharedVolatileAddressBrokerDefined() throws Exception { AddressInfo addressInfo = new AddressInfo(address); addressInfo.getRoutingTypes().add(RoutingType.MULTICAST); server.addAddressInfo(addressInfo); server.createQueue(address, RoutingType.MULTICAST, SimpleString.toSimpleString("myClientId.mySub:shared-volatile"), null, true, false, -1, false, false); AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect("myClientId")); AmqpSession session = connection.createSession(); Source source = createSharedSource(TerminusDurability.NONE); AmqpReceiver receiver = session.createMulticastReceiver(source, "myReceiverID", "mySub"); AmqpReceiver receiver2 = session.createMulticastReceiver(source, "myReceiverID", "mySub|1"); receiver.flow(1); receiver2.flow(1); sendMessages(address.toString(), 2); AmqpMessage amqpMessage = receiver.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile")).getBindable()).getConsumerCount()); receiver.close(); assertNotNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile"))); receiver2.close(); //check its **Hasn't** been deleted assertNotNull(server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub:shared-volatile"))); connection.close(); }
amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub")).getBindable()).getConsumerCount());
amqpMessage = receiver2.receive(5, TimeUnit.SECONDS); assertNotNull(amqpMessage); assertEquals(2, ((QueueImpl)server.getPostOffice().getBinding(SimpleString.toSimpleString("myClientId.mySub")).getBindable()).getConsumerCount());