的所有实例都是从其中收集到的。但是,由于这些对象是自动发现的,所以如何动态确定队列名就成了另一个难题。在本例中,我知道被发现的 MBean 的 ObjectName name 属性值就是队列的名称。例如,一个被发现的 MBean 的对象名可能是 jboss.mq.destination:service=Queue,name=MyQueue 。因此,我需要一种将被发现的对象的属性映射到跟踪名称空间的方式,这样就可以从每一个源中划分出被跟踪的指标。方法就是以与 JDBCCollector 中的 rowToken 相类似的形式来使用标记。JMXCollector 支持的标记有:
{target-property:name} :该标记用源自目标 MBean 的 ObjectName 的命名属性来取代。例子:{target-property:name}。
{this-property:name} :该标记用源自收集器的 ObjectName 的命名属性来取代。例子:{this-property:type}。
{target-domain:index} :该标记用目标 MBean 的 ObjectName 域的索引片断来取代。例子:{target-domain:2}。
{this-domain:index} :该标记用收集器的 ObjectName 域的索引片断来取代。例子:{target-domain:0}。
清单 16 展示了经过删减的 JBossMQ JMXCollector XML 配置:
清单 16. 本地 JBossMQ JMXCollector
<!-- The JBoss RMI MBeanServerConnection Provider -->
<bean id="LocalRMIAdaptor"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jbossJmxJndiTemplate" />
<property name="jndiName" value="jmx/invoker/RMIAdaptor" />
</bean>
<!-- The JBossMQ JMXCollection Profile -->
<bean id="StandardJBossJMSProfile"
class="org.runtimemonitoring.spring.collectors.collections.InitableHashSet"
init-method="init" >
<constructor-arg><set>
<bean class="org.runtimemonitoring.spring.collectors.jmx.JMXCollection">
<property name="targetObjectName" value="*:service=Queue,*"/>
<property name="segments" value="Destinations,Queues,{target-property:name}"/>
<property name="metricNames" value="*"/>
<property name="attributeNames"
value="QueueDepth,ScheduledMessageCount,InProcessMessageCount,ReceiversCount"/>
<property name="defaultMetricType" value="SINT"/>
</bean>
<bean class="org.runtimemonitoring.spring.collectors.jmx.JMXCollection">
<property name="targetObjectName" value="jboss.mq:service=DestinationManager"/>
<property name="segments" value="Destniations,{target-property:service}"/>
<property name="metricNames" value="*"/>
<property name="attributeNames" value="ClientCount"/>
<property name="defaultMetricType" value="SINT"/>
</bean>
<!-- MBeans Also Included: Topics, ThreadPool, MessageCache -->
</set>
</constructor>
</bean>
<!-- The JMXCollector for local JBoss
|