2

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

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

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

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

    @ManagedAttribute
    String customerId;
    .
    .
    .


}
4

1 回答 1

7

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

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

例如,我们执行以下操作:

...
mbeanExporter.registerManagedResource(beanInstance);
...

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

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

动态更改@ManagedResource objectName

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

于 2012-08-30T21:26:10.660 回答