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


Reply via email to