新手,想了解更多关于千分尺的知识。我目前正在探索如何实现这一目标的方法:
我正在使用启用了执行器和千分尺的 Spring boot 2。考虑下面的类:
@Component
class MyService {
@Autowired
AuthorizeTransaction callbackTransaction;
@Autowired
AuthorizeTransaction immediateTransaction;
private MeterRegistry meterRegistry;
private Counter requestCounter;
private Counter responseCounter;
public MyService(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
initCounters();
}
private initCounters() {
requestCounter = Counter.builder("iso_request")
.tags("mti", "0100") // how do I change the value of this tag for other request types like 0200, 0120, etc.,
.register(meterRegistry);
responseCounter = Counter.builder("iso_response")
.tags("mti", "0101")
.tags("response_code", "00") // how do I change the value of this tag for other response codes like 01, 09, etc.,
.register(meterRegistry);
}
public ISOMsg process(ISOMsg request) {
ISOMsg response = null;
try {
switch(request.getMTI()) { // org.jboss.iso.ISOMsg
case "0100":
case "0200":
if ("0100".equals(request.getMTI())) {
requestCounter.increment();
} else {
requestCounter.increment(); // I want to increment the counter of the same metric with tag mti=0200
}
response = immediateTransaction.process(request);
// here I want to increment the response counter but with different MTIs and response codes
break;
case "0120":
case "0121"
response = callbackTransaction.process(request);
break;
default:
log.error("error here")
}
} catch (Exception e) {
log.error("error here")
}
return response;
}
}
我被困在这里,必须为标签值的每个组合创建不同的计数器变量,并且代码的可读性受到非常严重的影响。与上面的示例相比,我有很多 switch case 语句。肯定应该有一个简单的方法来做到这一点,但我找不到。
要获得“动态”标签值,只需跳过计数器中的实例化即可initCounters()
方法。每次增加计数器时,使用其构建器方法实例化计数器并递增,例如:
Counter.builder("iso_response")
.tags("mti", request.getMTI())
.tags("response_code", myReponseCode)
.register(meterRegistry)
.increment();
事实上,作为io.micrometer.core.instrument.Counter.Builder.register https://javadoc.io/static/io.micrometer/micrometer-core/1.9.4/io/micrometer/core/instrument/Counter.Builder.html#register(io.micrometer.core.instrument.MeterRegistry)方法在其 JavaDoc 中指出,仅当具有相同标记值的计数器尚不存在时才返回新计数器。这是因为每个注册表都保证只为相同的名称和标签组合创建一个计数器.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)