@Override public Object getField(QueueControl queue, String fieldName) { Queue q = server.locateQueue(new SimpleString(queue.getName())); switch (fieldName) { case "id": return queue.getID(); case "name": return queue.getName(); case "address": return queue.getAddress(); case "filter": return queue.getFilter(); case "rate": return q.getRate(); case "durable": return queue.isDurable(); case "paused": return q.isPaused(); case "temporary": return queue.isTemporary(); case "purgeOnNoConsumers": return queue.isPurgeOnNoConsumers(); case "consumerCount": return queue.getConsumerCount(); case "maxConsumers": return queue.getMaxConsumers(); case "autoCreated": return q.isAutoCreated(); return q.getUser();
/** * @param queueName queue name * @return true if queue is paused, false if not. */ public boolean isPaused(String queueName) { try { return getQueueControl(queueName).isPaused(); } catch (Exception e) { throw new AsyncException(e); } }
@Override public int removeMessages(String filter) throws Exception { return control.removeMessages(filter); }
protected long getMessagesAdded(QueueControl control) throws Exception { control.flushExecutor(); return control.getMessagesAdded(); }
protected long getMessageCount(QueueControl control) throws Exception { control.flushExecutor(); return control.getMessageCount(); }
public static List<QueueControl> getQueues(final DurabilityType durability, AddressControl addressControl, ManagementService managementService) { try { List<QueueControl> matchingQueues = new ArrayList<>(); String[] queues = addressControl.getQueueNames(); for (String queue : queues) { QueueControl coreQueueControl = (QueueControl) managementService.getResource(ResourceNames.QUEUE + queue); // Ignore the "special" subscription if (coreQueueControl != null && !coreQueueControl.getName().equals(addressControl.getAddress())) { if (durability == DurabilityType.ALL || durability == DurabilityType.DURABLE && coreQueueControl.isDurable() || durability == DurabilityType.NON_DURABLE && !coreQueueControl.isDurable()) { matchingQueues.add(coreQueueControl); } } } return matchingQueues; } catch (Exception e) { return Collections.emptyList(); } }
context.getResult().set(control.getMessageCount()); } else if (SCHEDULED_COUNT.getName().equals(attributeName)) { context.getResult().set(control.getScheduledCount()); } else if (CONSUMER_COUNT.getName().equals(attributeName)) { context.getResult().set(control.getConsumerCount()); } else if (DELIVERING_COUNT.getName().equals(attributeName)) { context.getResult().set(control.getDeliveringCount()); } else if (MESSAGES_ADDED.getName().equals(attributeName)) { context.getResult().set(control.getMessagesAdded()); } else if (ID.getName().equals(attributeName)) { context.getResult().set(control.getID()); } else if (PAUSED.getName().equals(attributeName)) { try { context.getResult().set(control.isPaused()); } catch (RuntimeException e) { throw e; context.getResult().set(control.isTemporary()); } else if (EXPIRY_ADDRESS.getName().equals(attributeName)) { if (control.getExpiryAddress() != null) { context.getResult().set(control.getExpiryAddress()); if (control.getDeadLetterAddress() != null) { context.getResult().set(control.getDeadLetterAddress()); context.getResult().set(control.getAddress()); } else if (DURABLE.getName().equals(attributeName)) { context.getResult().set(control.isDurable()); } else if (FILTER.getName().equals(attributeName)) {
context.getResult().set(control.getMessageCount()); } catch (RuntimeException e) { throw e; context.getResult().set(control.getScheduledCount()); } else if (CommonAttributes.CONSUMER_COUNT.getName().equals(attributeName)) { context.getResult().set(control.getConsumerCount()); } else if (CommonAttributes.DELIVERING_COUNT.getName().equals(attributeName)) { context.getResult().set(control.getDeliveringCount()); } else if (CommonAttributes.MESSAGES_ADDED.getName().equals(attributeName)) { context.getResult().set(control.getMessagesAdded()); } else if (JMSQueueDefinition.QUEUE_ADDRESS.getName().equals(attributeName)) { context.getResult().set(control.getAddress()); } else if (JMSQueueDefinition.EXPIRY_ADDRESS.getName().equals(attributeName)) { String expiryAddress = control.getExpiryAddress(); if (expiryAddress != null) { result.set(expiryAddress); String dla = control.getDeadLetterAddress(); if (dla != null) { result.set(dla); context.getResult().set(control.isPaused()); } catch (RuntimeException e) { throw e; context.getResult().set(control.isTemporary()); } else {
@Test public void testAttributes() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString filter = new SimpleString("color = 'blue'"); session.createQueue(address, RoutingType.MULTICAST, queue, filter, durable); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(queue.toString(), queueControl.getName()); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(filter.toString(), queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertFalse(queueControl.isTemporary()); session.deleteQueue(queue); }
String subName = null; if (queue.isDurable() && RoutingType.MULTICAST.toString().equals(queue.getRoutingType())) { Pair<String, String> pair = ActiveMQDestination.decomposeQueueNameForDurableSubscription(queue.getName()); clientID = pair.getA(); subName = pair.getB(); } else if (RoutingType.MULTICAST.toString().equals(queue.getRoutingType())) { String filter = queue.getFilter() != null ? queue.getFilter() : null; .add("queueName", queue.getName()) .add("clientID", nullSafe(clientID)) .add("selector", nullSafe(filter)) .add("name", nullSafe(subName)) .add("durable", queue.isDurable()) .add("messageCount", queue.getMessageCount()) .add("deliveringCount", queue.getDeliveringCount()) .add("consumers", queue.listConsumersAsJSON()) .build();
@Test public void testCreateAndDestroyQueue_4() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); boolean durable = RandomUtil.randomBoolean(); boolean purgeOnNoConsumers = RandomUtil.randomBoolean(); boolean autoCreateAddress = true; int maxConsumers = RandomUtil.randomInt(); ActiveMQServerControl serverControl = createManagementControl(); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); serverControl.createQueue(address.toString(), RoutingType.ANYCAST.toString(), name.toString(), null, durable, maxConsumers, purgeOnNoConsumers, autoCreateAddress); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertEquals(purgeOnNoConsumers, queueControl.isPurgeOnNoConsumers()); Assert.assertEquals(maxConsumers, queueControl.getMaxConsumers()); Assert.assertEquals(false, queueControl.isTemporary()); checkResource(ObjectNameBuilder.DEFAULT.getAddressObjectName(address)); AddressControl addressControl = ManagementControlHelper.createAddressControl(address, mbeanServer); Assert.assertEquals(address.toString(), addressControl.getAddress()); serverControl.destroyQueue(name.toString(), true, true); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); checkNoResource(ObjectNameBuilder.DEFAULT.getAddressObjectName(address)); }
Assert.assertEquals(0, queueControl.getMessageCount()); Assert.assertEquals(0, queueControl.getConsumerCount()); Assert.assertEquals(0, queueControl.getDeliveringCount()); Assert.assertEquals(THREAD_COUNT * MSG_COUNT, queueControl.getMessagesAdded()); Assert.assertEquals(THREAD_COUNT * MSG_COUNT, queueControl.getMessagesAcknowledged());
private JsonObject enrichConsumer(JsonObject originalConsumer, ActiveMQServer server) { JsonObjectBuilder enrichedConsumer = Json.createObjectBuilder(); for (Map.Entry<String, JsonValue> entry : originalConsumer.entrySet()) { enrichedConsumer.add(entry.getKey(), entry.getValue()); } String queueName = originalConsumer.getString("queueName"); final QueueControl queueControl = QueueControl.class.cast(server.getManagementService().getResource(ResourceNames.QUEUE + queueName)); if (queueControl == null) { return originalConsumer; } enrichedConsumer.add("durable", queueControl.isDurable()); String routingType = queueControl.getRoutingType(); String destinationType = routingType.equals("ANYCAST") ? "queue" : "topic"; enrichedConsumer.add("destinationType", destinationType); String address = queueControl.getAddress(); String destinationName = inferDestinationName(address); enrichedConsumer.add("destinationName", destinationName); return enrichedConsumer.build(); }
@Test public void testPauseAndResume() { long counterPeriod = 1000; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); try { session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); ActiveMQServerControl serverControl = ManagementControlHelper.createActiveMQServerControl(mbeanServer); serverControl.enableMessageCounters(); serverControl.setMessageCounterSamplePeriod(counterPeriod); Assert.assertFalse(queueControl.isPaused()); queueControl.pause(); Assert.assertTrue(queueControl.isPaused()); queueControl.resume(); Assert.assertFalse(queueControl.isPaused()); } catch (Exception e) { e.printStackTrace(); } }
@Test public void testTempTopicLeak() throws Exception { Connection connection = null; try { connection = factory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); TemporaryTopic temporaryTopic = session.createTemporaryTopic(); temporaryTopic.delete(); Object[] queueResources = server.getManagementService().getResources(QueueControl.class); for (Object queueResource : queueResources) { if (((QueueControl) queueResource).getAddress().equals("ActiveMQ.Advisory.TempTopic")) { QueueControl queueControl = (QueueControl) queueResource; Wait.waitFor(() -> queueControl.getMessageCount() == 0); assertNotNull("addressControl for temp advisory", queueControl); Wait.assertEquals(0, queueControl::getMessageCount); Wait.assertEquals(2, queueControl::getMessagesAdded); } } } finally { if (connection != null) { connection.close(); } } }
private long getMessageCount(final DurabilityType durability) { List<QueueControl> queues = getQueues(durability); long count = 0; for (QueueControl queue : queues) { count += queue.getMessageCount(); } return count; }
@Test public void testGetScheduledCountOnRemove() throws Exception { long delay = Integer.MAX_VALUE; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(0, queueControl.getScheduledCount()); Field queueMemorySizeField = QueueImpl.class.getDeclaredField("queueMemorySize"); queueMemorySizeField.setAccessible(true); final LocalQueueBinding binding = (LocalQueueBinding) server.getPostOffice().getBinding(queue); Queue q = binding.getQueue(); AtomicInteger queueMemorySize1 = (AtomicInteger) queueMemorySizeField.get(q); assertEquals(0, queueMemorySize1.get()); ClientProducer producer = session.createProducer(address); ClientMessage message = session.createMessage(durable); message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, System.currentTimeMillis() + delay); producer.send(message); queueControl.removeAllMessages(); Assert.assertEquals(0, queueControl.getMessageCount()); //Verify that original queue has a memory size of 0 assertEquals(0, queueMemorySize1.get()); session.deleteQueue(queue); }
@Override public String[] getQueueNames(String routingType) { checkStarted(); clearIO(); try { Object[] queueControls = server.getManagementService().getResources(QueueControl.class); List<String> names = new ArrayList<>(); for (int i = 0; i < queueControls.length; i++) { QueueControl queueControl = (QueueControl) queueControls[i]; if (routingType != null && queueControl.getRoutingType().equals(routingType.toUpperCase())) { names.add(queueControl.getName()); } else if (routingType == null) { names.add(queueControl.getName()); } } String[] result = new String[names.size()]; return names.toArray(result); } finally { blockOnIO(); } }
private int getDeliveringCount(AddressControl addressControl, ManagementService managementService) { List<QueueControl> queues = getQueues(DurabilityType.ALL, addressControl, managementService); int count = 0; for (QueueControl queue : queues) { count += queue.getDeliveringCount(); } return count; }
@Test public void testGetNullFilter() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(queue.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); session.deleteQueue(queue); }