我有一个白标/多租户服务器,提供相同的服务,但为多个客户打造品牌。我想使用JMX来监控每个客户的状态(nbr of calls,nbr of errors等)。
我知道如何使用Spring JMX注释来连接我的POJO(根据下面的代码)。我真正想要的是每个客户一个MBean,但由于客户在服务器启动时动态加载,我不知道如何使用注释来连接它。
这可能吗?如果没有,是否可以在启动时实例化我的MBean?
@Component
@ManagedResource(objectName = "TravelAPI:name=Customer")
public class CustomerStatus extends GeneralCustomerStatus {
@ManagedAttribute
String customerId;
.
.
.
}
答案 0 :(得分:6)
我们所做的是让实际实例化动态对象的实体通过MBeanExporter
向JMX注册它们。我们将MBeanExporter
实例注入工厂实体,然后调用MBeanExporter.registerManagedResource(...)
。
例如我们做的事情如下:
...
mbeanExporter.registerManagedResource(beanInstance);
...
@Required
public void setMbeanExporter(MBeanExporter mbeanExporter) {
this.mbeanExporter = mbeanExporter;
}
我们还使用NamingPolicy
,以便动态对象可以提供自己的名称以使其唯一。在此处查看有关详细信息:
另外,我的SimpleJMX package有一些代码可以帮助处理动态对象。