Counter
Counter是一種比較簡單的Meter,它是一種單值的度量類型,
或者說是一個單值計數器。Counter接口允許使用者使用一個固定值(必須爲正數)進行計數。準確來說:Counter就是一個增量爲正數的單值計數器。
舉個很簡單的使用例子
使用場景:
Counter的作用是記錄XXX的總量或者計數值,適用於一些增長類型的統計,例如下單、支付次數、Http請求總量記錄等等,通過Tag可以區分不同的場景,對於下單,可以使用不同的Tag標記不同的業務來源或者是按日期劃分,對於Http請求總量記錄,可以使用Tag區分不同的URL。用下單業務舉個例子:
//實體
@Data
public class Order {
private String orderId;
private Integer amount;
private String channel;
private LocalDateTime createTime;
}
public class CounterMain {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
static {
Metrics.addRegistry(new SimpleMeterRegistry());
}
public static void main(String[] args) throws Exception {
Order order1 = new Order();
order1.setOrderId("ORDER_ID_1");
order1.setAmount(100);
order1.setChannel("CHANNEL_A");
order1.setCreateTime(LocalDateTime.now());
createOrder(order1);
Order order2 = new Order();
order2.setOrderId("ORDER_ID_2");
order2.setAmount(200);
order2.setChannel("CHANNEL_B");
order2.setCreateTime(LocalDateTime.now());
createOrder(order2);
Search.in(Metrics.globalRegistry).meters().forEach(each -> {
StringBuilder builder = new StringBuilder();
builder.append("name:")
.append(each.getId().getName())
.append(",tags:")
.append(each.getId().getTags())
.append(",type:").append(each.getId().getType())
.append(",value:").append(each.measure());
System.out.println(builder.toString());
});
}
private static void createOrder(Order order) {
//忽略訂單入庫等操作
Metrics.counter("order.create",
"channel", order.getChannel(),
"createTime", FORMATTER.format(order.getCreateTime())).increment();
}
}
上面的例子是使用全局靜態方法工廠類Metrics去構造Counter實例,實際上,io.micrometer.core.instrument.Counter接口提供了一個內部建造器類Counter.Builder去實例化Counter,Counter.Builder的使用方式如下:
public class CounterBuilderMain {
public static void main(String[] args) throws Exception{
Counter counter = Counter.builder("name") //名稱
.baseUnit("unit") //基礎單位
.description("desc") //描述
.tag("tagKey", "tagValue") //標籤
.register(new SimpleMeterRegistry());//綁定的MeterRegistry
counter.increment();
}
}