前言
本文还是拾遗–> 对MetricsEndpointMetricReader进行讲解.
解析
MetricsEndpointMetricReader–>实现了MetricReader接口,通过拉取MetricsEndpoint的所有的值来实现MetricReader.由于没有timestamp的数据,因此没有必要检查其是否是最新的,而且其默认是当前时间
该类没有进行自动装配
字段,构造器如下:
private final MetricsEndpoint endpoint; public MetricsEndpointMetricReader(MetricsEndpoint endpoint) { this.endpoint = endpoint; }
其方法实现如下:
findOne,代码如下:
public Metric<?> findOne(String metricName) { Metric<Number> metric = null; // 1. 调用MetricsEndpoint#invoke获得所有的Metric,其返回值是一个map,key-->Metric的名字, // value-->Metric对应的值 Object value = this.endpoint.invoke().get(metricName); if (value != null) { // 2. 如果存在,则将其封装为Metric,注意,此时,Metric的时间戳为当前时间 metric = new Metric<Number>(metricName, (Number) value); } return metric; }
- 调用MetricsEndpoint#invoke获得所有的Metric,其返回值是一个map,key–>Metric的名字,value–>Metric对应的值
- 如果存在,则将其封装为Metric,注意,此时,Metric的时间戳为当前时间
findAll,代码如下:
public Iterable<Metric<?>> findAll() { List<Metric<?>> metrics = new ArrayList<Metric<?>>(); // 1. 调用MetricsEndpoint#invoke获得所有的Metric,其返回值是一个map,key-->Metric的名字, // value-->Metric对应的值 Map<String, Object> values = this.endpoint.invoke(); Date timestamp = new Date(); // 2. 遍历之,依次将其封装为Metric.注意,此时,Metric的时间戳为当前时间,加入到结果集即可 for (Entry<String, Object> entry : values.entrySet()) { String name = entry.getKey(); Object value = entry.getValue(); metrics.add(new Metric<Number>(name, (Number) value, timestamp)); } return metrics; }
- 调用MetricsEndpoint#invoke获得所有的Metric,其返回值是一个map,key–>Metric的名字,value–>Metric对应的值
- 遍历之,依次将其封装为Metric.注意,此时,Metric的时间戳为当前时间,加入到结果集即可
count,实现如下:
public long count() { return this.endpoint.invoke().size(); }