You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis:能否通过ActiveMQServer对象访问管理API(非JMX方式)

直接通过ActiveMQServer访问管理API(嵌入式代理场景)

完全可以直接通过ActiveMQServer实例访问QueueControl、AddressControl、DivertControl等管理API,无需依赖JMX,这种方式在嵌入式代理场景下非常实用,以下是针对你需求的具体实现方案:

获取队列信息与消息计数器统计

通过ActiveMQServer的getManagementService()方法获取管理服务实例,再通过它直接拿到目标队列的QueueControl对象:

// 假设已初始化并启动ActiveMQServer实例server
ManagementService managementService = server.getManagementService();
// 获取代理中所有队列的名称集合
Set<String> queueNames = managementService.getQueueNames();

for (String queueName : queueNames) {
    // 获取指定队列的QueueControl
    QueueControl queueControl = managementService.getResource(queueName, QueueControl.class);
    
    // 获取队列基础信息
    System.out.println("队列名称: " + queueControl.getName());
    System.out.println("当前待处理消息数: " + queueControl.getMessageCount());
    
    // 获取Message Counters的详细统计数据
    Map<String, Object> messageCounters = queueControl.getMessageCounter();
    System.out.println("累计消费消息数: " + messageCounters.get("count"));
    System.out.println("实时消费速率: " + messageCounters.get("messageRate"));
}

动态销毁队列

通过QueueControl或AddressControl都可以实现队列销毁,根据场景选择:

// 方式1:直接通过QueueControl销毁指定队列
QueueControl targetQueueControl = managementService.getResource("target-queue", QueueControl.class);
targetQueueControl.destroy();

// 方式2:通过AddressControl销毁地址下的指定队列(适合关联地址管理的场景)
AddressControl addressControl = managementService.getResource("target-address", AddressControl.class);
addressControl.removeQueue("target-queue");

AddressControl、DivertControl的访问方式

访问逻辑和QueueControl完全一致,通过managementService.getResource()传入对应资源名称和控制类即可:

  • AddressControl:传入地址名称,可实现地址级别的管理操作(如创建队列、配置路由规则)
  • DivertControl:传入分流器名称,可管理分流规则的启用、禁用或修改

注意:嵌入式代理默认启用管理服务,若需手动配置,可在初始化Configuration时设置managementEnabled=true。

内容的提问来源于stack exchange,提问作者TdBm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:12:06