默认情况下,所有
MeterBinder
bean的度量标准将自动绑定到Spring管理的MeterRegistry
当可以单独配置活页夹时,这非常有用。但是,我要查找的是能够批量声明多个绑定程序。我的用例基于以编程方式声明和创建多个Rabbit队列。 spring-amqp
项目附带了Declarables
类的概念,该概念是:
Declarable
个对象的集合;用于在代理上使用集合的单个bean声明声明多个对象。
spring-boot中是否存在类似的概念,我将其称为MeterBinders
,它允许我使用单个bean声明来声明多个仪表对象。
我想避免队列和仪表的同时出现延迟(使用new QueueSizeMeterBinder(queueInformation).bindTo(meterRegistry)
-将它们分开)。
当前,为了使这些概念分开,我正在使用其他配置类,在我看来这不是惯用的弹跳之路
@Configuration
@RequiredArgsConstructor
class QueueMetricsConfiguration {
private final Declarables queues;
private final AmqpAdmin amqpAdmin;
private final MeterRegistry meterRegistry;
@PostConstruct
public void bindMetrics() {
queues.getDeclarablesByType(Queue.class)
.forEach(queue -> new QueueSizeMeterBinder(amqpAdmin.getQueueInfo(queue.getName()))
.bindTo(meterRegistry));
}
}
我能做得更好吗?
我不确定您的解释正确无误,但是在我的项目中将多个绑定注册为一个MeterBinder
就是我所说的复合装订器:
@Bean
MeterBinder compositeBinder() {
return (registry) -> {
// register Meters via a binder
new FooBinder().bindTo(registry);
new BarBinder().bindTo(registry);
// register without indirection
registry.gauge("mygauge", BigDecimal.TEN);
};
}