是否可以在单个bean声明中声明多个千分尺粘合剂

问题描述 投票:0回答:1

默认情况下,所有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));
    }

}

我能做得更好吗?

java spring-boot spring-boot-actuator micrometer
1个回答
0
投票

我不确定您的解释正确无误,但是在我的项目中将多个绑定注册为一个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);
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.