To get the destination names, as you did it is correct, you can do it by JMX too specifically to get statistical information like subscriber count ...import java.util.HashMap;import java.util.Map;import javax.management.MBeanServerConnection;import javax.management.MBeanServerInvocationHandler;import javax.management.ObjectName;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;import org.apache.activemq.broker.jmx.BrokerViewMBean;import org.apache.activemq.broker.jmx.TopicViewMBean;public class JMXGetDestinationInfos { public static void main(String[] args) throws Exception { JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"); Map<String, String[]> env = new HashMap<>(); String[] creds = { "admin", "admin" }; env.put(JMXConnector.CREDENTIALS, creds); JMXConnector jmxc = JMXConnectorFactory.connect(url, env); MBeanServerConnection conn = jmxc.getMBeanServerConnection(); ObjectName activeMq = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost"); BrokerViewMBean mbean = MBeanServerInvocationHandler.newProxyInstance(conn, activeMq, BrokerViewMBean.class, true); for (ObjectName name : mbean.getTopics()) { if (("YOUR_TOPIC_NAME".equals(name.getKeyProperty("destinationName")))) { TopicViewMBean topicMbean = MBeanServerInvocationHandler.newProxyInstance(conn, name, TopicViewMBean.class, true); System.out.println(topicMbean.getConsumerCount()); } } }} 或 import java.util.Set;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.JMSException;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;import org.apache.activemq.advisory.DestinationSource;import org.apache.activemq.command.ActiveMQQueue;import org.apache.activemq.command.ActiveMQTopic;public class AdvisorySupportGetAllDestinationsNames { public static void main(String[] args) throws JMSException { Connection conn = null; try { ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616"); conn = cf.createConnection(); conn.start(); DestinationSource destinationSource = ((ActiveMQConnection) conn).getDestinationSource(); Set<ActiveMQQueue> queues = destinationSource.getQueues(); Set<ActiveMQTopic> topics = destinationSource.getTopics(); System.out.println(queues); System.out.println(topics); } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (Exception e) { } } } }} 更新 您可以使用AdvisorySupport.getConsumerAdvisoryTopic() 请注意,消费者启动/停止咨询消息还包含一个 consumerCount标头指示活动消费者的数量 咨询消息发送到的目的地. Note that the consumer start/stop advisory messages also have a consumerCount header to indicate the number of active consumers on the destination when the advisory message was sent. 这篇关于JMSTemplate检查主题是否存在并获取订阅者计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-29 17:08