在 spring-boot 应用程序中将 Micrometer 与 OpenFeign 结合使用

use*_*252 9 spring-boot feign micrometer spring-micrometer

OpenApi 文档说它支持微米。整合如何运作?除了这个小文档之外我找不到任何东西。

我在 Spring Boot 应用程序中有一个 FeignClient

@FeignClient(name = "SomeService", url = "xxx", configuration = FeignConfiguration.class)
public interface SomeService {

    @GET
    @Path("/something")
    Something getSomething();
}
Run Code Online (Sandbox Code Playgroud)

与配置

public class FeignConfiguration {
    @Bean
    public Capability capability() {
        return new MicrometerCapability();
    }
}
Run Code Online (Sandbox Code Playgroud)

和微米积分作为依赖项

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-micrometer</artifactId>
    <version>10.12</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

该代码进行了调用,但我无法通过actuator概述找到任何新指标,需要一些有关我的 HTTP 请求的一般信息。缺少什么部分?

Jon*_*oni 7

更新

我添加了对此的支持spring-cloud-openfeign。在下一个版本(2020.0.2)之后,如果设置了千分尺,您唯一需要做的就是将其放入feign-micrometer类路径中。

旧答案

我不确定您是否这样做,但我建议spring-cloud-openfeign您使用哪些自动配置 Feign 组件。不幸的是,它似乎不会自动配置Capability(这就是您的解决方案不起作用的原因之一),因此您需要手动执行此操作,请参阅文档如何执行此操作

我能够结合 OpenFeign 和 Spring Cloud OpenFeign 文档中的示例来完成这项工作:

@Import(FeignClientsConfiguration.class)
class FooController {
    private final FooClient fooClient;

    public FooController(Decoder decoder, Encoder encoder, Contract contract, MeterRegistry meterRegistry) {
        this.fooClient = Feign.builder()
                .encoder(encoder)
                .decoder(decoder)
                .contract(contract)
                .addCapability(new MicrometerCapability(meterRegistry))
                .target(FooClient.class, "https://PROD-SVC");
    }
}

Run Code Online (Sandbox Code Playgroud)

我做了什么:

  • 用过的spring-cloud-openfeign
  • 添加feign-micrometer(参见feign-bom
  • 按照上面的方式创建客户端导入和FeignClientsConfiguration传递MeterRegistry至关重要MicrometerCapability

之后,我打电话给客户,得到了新的指标:

  • feign.Client
  • feign.Feign
  • feign.codec.Decoder
  • feign.codec.Decoder.response_size

  • @user1451252 是的,我打开了 PR。:) (2认同)