This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq.git
The following commit(s) were added to refs/heads/main by this push:
new 273d8fba9f [AMQ-9548] Add BrokerView attributes to retrieve number of
total, managed, and temporary queues and topics (#1288)
273d8fba9f is described below
commit 273d8fba9fa827c4f87a7737edeb24eb7babd337
Author: Ken Liao <[email protected]>
AuthorDate: Sun Sep 28 20:55:25 2025 -0700
[AMQ-9548] Add BrokerView attributes to retrieve number of total, managed,
and temporary queues and topics (#1288)
* Add attributes to display total number of queues and topics
* Addressed comments and add metrics for temporary queues and topics
* Use assertEquals and make the test more accurate
* renamed NonSuppreseed to Managed
* fixed logic for counting ManagedTopic and ManagedQueue
---
.../org/apache/activemq/broker/jmx/BrokerView.java | 30 ++++++++
.../activemq/broker/jmx/BrokerViewMBean.java | 18 +++++
.../apache/activemq/broker/jmx/BrokerViewTest.java | 90 ++++++++++++++++++++++
3 files changed, 138 insertions(+)
diff --git
a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java
b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java
index e8ec158dae..f5c8468297 100644
---
a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java
+++
b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java
@@ -280,11 +280,41 @@ public class BrokerView implements BrokerViewMBean {
return safeGetBroker().getTopicsNonSuppressed();
}
+ @Override
+ public int getTotalTopicsCount() {
+ return safeGetBroker().getTopicRegion().getDestinationMap().size();
+ }
+
+ @Override
+ public int getTotalManagedTopicsCount() {
+ return safeGetBroker().getTopicsNonSuppressed().length;
+ }
+
+ @Override
+ public int getTotalTemporaryTopicsCount() {
+ return safeGetBroker().getTempTopicRegion().getDestinationMap().size();
+ }
+
@Override
public ObjectName[] getQueues() {
return safeGetBroker().getQueuesNonSuppressed();
}
+ @Override
+ public int getTotalQueuesCount() {
+ return safeGetBroker().getQueueRegion().getDestinationMap().size();
+ }
+
+ @Override
+ public int getTotalManagedQueuesCount() {
+ return safeGetBroker().getQueuesNonSuppressed().length;
+ }
+
+ @Override
+ public int getTotalTemporaryQueuesCount() {
+ return safeGetBroker().getTempQueueRegion().getDestinationMap().size();
+ }
+
@Override
public String queryQueues(String filter, int page, int pageSize) throws
IOException {
return DestinationsViewFilter.create(filter)
diff --git
a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerViewMBean.java
b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerViewMBean.java
index 7584a71734..8e6ae70efe 100644
---
a/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerViewMBean.java
+++
b/activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerViewMBean.java
@@ -179,9 +179,27 @@ public interface BrokerViewMBean extends Service {
@MBeanInfo("Topics (broadcasted 'queues'); generally system information.")
ObjectName[] getTopics();
+ @MBeanInfo("Total number of topics")
+ int getTotalTopicsCount();
+
+ @MBeanInfo("Total number of non suppressed topics")
+ int getTotalManagedTopicsCount();
+
+ @MBeanInfo("Total number of temporary topics")
+ int getTotalTemporaryTopicsCount();
+
@MBeanInfo("Standard Queues containing AIE messages.")
ObjectName[] getQueues();
+ @MBeanInfo("Total number of queues")
+ int getTotalQueuesCount();
+
+ @MBeanInfo("Total number of non suppressed queues")
+ int getTotalManagedQueuesCount();
+
+ @MBeanInfo("Total number of temporary queues")
+ int getTotalTemporaryQueuesCount();
+
/**
* Queue Query API, take a look at {@link DestinationsViewFilter} for more
information
*/
diff --git
a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/jmx/BrokerViewTest.java
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/jmx/BrokerViewTest.java
new file mode 100644
index 0000000000..c3b0f72025
--- /dev/null
+++
b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/jmx/BrokerViewTest.java
@@ -0,0 +1,90 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.broker.jmx;
+
+import jakarta.jms.*;
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.broker.BrokerRegistry;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.util.Wait;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class BrokerViewTest {
+ @Test(timeout=120000)
+ public void testBrokerViewRetrieveQueuesAndTopicsCount() throws Exception {
+ BrokerService brokerService = new BrokerService();
+ brokerService.setPersistent(false);
+
+ // Create and configure ManagementContext with suppressed destinations
+ ManagementContext managementContext = new ManagementContext();
+ managementContext.setCreateConnector(false);
+
managementContext.setSuppressMBean("endpoint=dynamicProducer,destinationName=suppressedQueue,destinationName=suppressedTopic");
+ brokerService.setManagementContext(managementContext);
+ brokerService.start();
+
+ ActiveMQConnectionFactory factory = new
ActiveMQConnectionFactory(BrokerRegistry.getInstance().findFirst().getVmConnectorURI());
+ Connection producerConnection = factory.createConnection();
+ producerConnection.start();
+ // Create non-suppressed queue
+ Session producerSession = producerConnection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
+ Queue queue = producerSession.createQueue("testQueue");
+ MessageProducer producer = producerSession.createProducer(queue);
+ producer.send(producerSession.createTextMessage("testMessage"));
+ // Create suppressed queue
+ Queue suppressedQueue = producerSession.createQueue("suppressedQueue");
+ MessageProducer suppressedProducer =
producerSession.createProducer(suppressedQueue);
+
suppressedProducer.send(producerSession.createTextMessage("testMessage"));
+ // Create temporary queue
+ Session tempProducerSession = producerConnection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
+ Queue tempQueue = tempProducerSession.createTemporaryQueue();
+ MessageProducer tempProducer =
tempProducerSession.createProducer(tempQueue);
+
tempProducer.send(tempProducerSession.createTextMessage("testMessage"));
+ Session tempProducerSession2 = producerConnection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
+ Queue tempQueue2 = tempProducerSession2.createTemporaryQueue();
+ MessageProducer tempProducer2 =
tempProducerSession2.createProducer(tempQueue2);
+
tempProducer2.send(tempProducerSession2.createTextMessage("testMessage"));
+ // Create non-suppressed topic
+ Session topicProducerSession = producerConnection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
+ Topic topic = topicProducerSession.createTopic("testTopic");
+ MessageProducer topicProducer =
topicProducerSession.createProducer(topic);
+
topicProducer.send(topicProducerSession.createTextMessage("testMessage"));
+ // Create suppressed topic
+ Session suppressedTopicProducerSession =
producerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ Topic suppressedTopic =
suppressedTopicProducerSession.createTopic("suppressedTopic");
+ MessageProducer suppressedTopicProducer =
topicProducerSession.createProducer(suppressedTopic);
+
topicProducer.send(suppressedTopicProducerSession.createTextMessage("testMessage"));
+ // Create temporary topic
+ Session tempTopicProducerSession =
producerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ Topic tempTopic = tempTopicProducerSession.createTemporaryTopic();
+ MessageProducer tempTopicProducer =
tempTopicProducerSession.createProducer(tempTopic);
+
tempTopicProducer.send(tempTopicProducerSession.createTextMessage("testMessage"));
+
+ assertTrue(Wait.waitFor(() -> (brokerService.getAdminView()) != null));
+ final BrokerView view = brokerService.getAdminView();
+ assertEquals(15, view.getTotalTopicsCount());
+ assertEquals(14, view.getTotalManagedTopicsCount());
+ assertEquals(1, view.getTotalTemporaryTopicsCount());
+ assertEquals(1, view.getQueues().length);
+ assertEquals(2, view.getTotalQueuesCount());
+ assertEquals(1, view.getTotalManagedQueuesCount());
+ assertEquals(view.getTotalTemporaryQueuesCount(), 2);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact