關於Counter

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();
        }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章