【问题标题】:Dynamically instantiate JMX MBeans动态实例化 JMX MBean
【发布时间】:2012-08-30 20:35:01
【问题描述】:

我有一个白标/多租户服务器,提供相同的服务,但为多个客户打上品牌。我想使用 JMX 来监控每​​个客户的状态(调用次数、错误次数等)。

我知道如何使用 Spring JMX 注释来连接我的 POJO(根据下面的代码)。我真正想要的是每个客户一个 MBean,但是因为客户是在服务器启动时动态加载的,所以我不知道如何使用注释来连接它。

这可能吗?如果没有,是否可以在启动时实例化我的 MBean?

@Component
@ManagedResource(objectName = "TravelAPI:name=Customer") 
public class CustomerStatus extends GeneralCustomerStatus {

    @ManagedAttribute
    String customerId;
    .
    .
    .


}

【问题讨论】:

    标签: java spring jmx


    【解决方案1】:

    我真正想要的是每个客户一个 MBean,但是因为客户是在服务器启动时动态加载的,所以我不知道如何使用注释来连接它。

    我们所做的是让实体实例化您的动态对象,通过MBeanExporter 将它们注册到 JMX。我们将MBeanExporter实例注入工厂实体,然后调用MBeanExporter.registerManagedResource(...)

    例如我们做这样的事情:

    ...
    mbeanExporter.registerManagedResource(beanInstance);
    ...
    
    @Required
    public void setMbeanExporter(MBeanExporter mbeanExporter) {
        this.mbeanExporter = mbeanExporter;
    }
    

    我们还使用NamingPolicy,以便动态对象可以提供自己的名称以使其独一无二。在此处查看更多详细信息:

    Change @ManagedResource objectName dynamically

    顺便说一句,我的SimpleJMX package 有一些代码可以帮助处理动态对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      相关资源
      最近更新 更多