是否可以在单个 bean 声明中声明多个千分尺绑定器
Is it possible to declare multiple micrometer binders in a single bean declaration
By default, metrics from all MeterBinder
beans will be automatically bound to the Spring-managed MeterRegistry
当可以单独配置活页夹时,这非常有用。然而,我正在寻找的是能够批量声明多个活页夹。我的用例基于以编程方式声明和创建多个兔子队列。 spring-amqp
项目带有 Declarables
class 的概念,即:
A collection of Declarable
objects; used to declare multiple objects on the broker using a single bean declaration for the collection.
spring-boot 中是否存在类似的概念,我称之为 MeterBinders
,它允许我使用单个 bean 声明声明多个仪表对象。
我想避免同时声明我的队列和仪表(使用 new QueueSizeMeterBinder(queueInformation).bindTo(meterRegistry)
- 将它们分开)。
目前,为了将这些概念分开,我正在使用额外的配置 class,这在我看来并不是惯用的 spring 方式
@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);
};
}
By default, metrics from all
MeterBinder
beans will be automatically bound to the Spring-managedMeterRegistry
当可以单独配置活页夹时,这非常有用。然而,我正在寻找的是能够批量声明多个活页夹。我的用例基于以编程方式声明和创建多个兔子队列。 spring-amqp
项目带有 Declarables
class 的概念,即:
A collection of
Declarable
objects; used to declare multiple objects on the broker using a single bean declaration for the collection.
spring-boot 中是否存在类似的概念,我称之为 MeterBinders
,它允许我使用单个 bean 声明声明多个仪表对象。
我想避免同时声明我的队列和仪表(使用 new QueueSizeMeterBinder(queueInformation).bindTo(meterRegistry)
- 将它们分开)。
目前,为了将这些概念分开,我正在使用额外的配置 class,这在我看来并不是惯用的 spring 方式
@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);
};
}