You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Micrometer Counter计数器的递减操作?

Micrometer实现可递减的计数器方案

Micrometer的Counter是单调递增的度量指标,设计语义就是统计累计发生的次数(比如请求量、错误数),因此它的increment()方法仅接受非负数,传入负数会被直接忽略,这是特性而非bug。要实现可减1的计数器,你可以用以下两种方案:

方案1:使用Gauge(计量表)

Gauge支持表示任意数值,可自由进行增减操作,适合需要双向变动的指标。

实现步骤:

  1. 维护一个线程安全的变量存储计数器值:
import java.util.concurrent.atomic.AtomicInteger;

AtomicInteger mutableCounter = new AtomicInteger(0);
  1. 将该变量注册为Gauge:
import io.micrometer.core.instrument.Gauge;

Gauge.builder("SOME_COUNTER", mutableCounter, AtomicInteger::get)
      .register(meterRegistry);
  1. 执行增减操作:
// 递增1
mutableCounter.incrementAndGet();
// 递减1
mutableCounter.decrementAndGet();

方案2:拆分两个Counter统计增减,计算差值

如果你的监控系统更适配Counter类型(比如Prometheus对Counter的自动累加支持),可以分别统计递增和递减的次数,最后通过监控面板的表达式计算最终值。

实现步骤:

  1. 定义两个Counter:
import io.micrometer.core.instrument.Counter;

Counter increaseCounter = meterRegistry.counter("SOME_COUNTER.increase");
Counter decreaseCounter = meterRegistry.counter("SOME_COUNTER.decrease");
  1. 对应执行增减操作:
// 递增操作
increaseCounter.increment();
// 递减操作
decreaseCounter.increment();
  1. 在监控面板中计算最终值:
    通过表达式 SOME_COUNTER.increase - SOME_COUNTER.decrease 得到实际的计数器结果。

内容的提问来源于stack exchange,提问作者Rahul Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:42:10