• 可观测性-Metrics-WebClient异步Http远程Call


    代码示例

    1.依赖导入

     <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webfluxartifactId>
            dependency>
     <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-actuatorartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.定义一个远程call客户端

    @Service
    public class BaiduClient {
        @Bean
        public WebClient baidu(WebClient.Builder webClientBuilder) {
            return  webClientBuilder.baseUrl("https://xxxx.cn").build();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.定义一个指标注册器(输出到日志文件)

    @Configuration
    public class MetricsRegistryConfiguration {
    
        @ConditionalOnProperty(name = "metrics.export", havingValue = "log", matchIfMissing = true)
        @Bean
        public MeterRegistry meterRegistry() {
            return new LoggingMeterRegistry(new LoggingRegistryConfig() {
                @Override
                public String get(String key) {
                    return null;
                }
    
                @Override
                public Duration step() {
                    return Duration.ofSeconds(60);
                }
            }, Clock.SYSTEM);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    4.日志配置

     
        <logger name="io.micrometer.core.instrument.logging.LoggingMeterRegistry" level="INFO"/>
    
    • 1
    • 2

    5.调用示例

    @Controller
    public class XXXXController {
        @Autowired
        WebClient baidu;
    
        @GetMapping("/test")
        @ResponseBody
        public Response captcha() {
            baidu.get()
                    .uri("/echo")
                    .retrieve().bodyToMono(String.class)
                    .block(Duration.ofSeconds(10));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6.示例结果日志

    http.client.requests{client.name=xxx.cn,error=none,exception=none,method=GET,outcome=SUCCESS,status=200,uri=/echo} throughput=0.3/s mean=0.271909994s max=0.6102772s
    
    • 1

    高级

    你还可以使用ObservationWebClientCustomizer定制。

    默认情况下,生成的指标名称为http.client.requests。您可以通过设置属性来自定义名称

    • management.observations.http.client.requests.name(3.X版本)
    • management.metrics.web.client.requests-metric-name(2.X)

    自定义标签,提供一个实现自org.springframework.web.reactive.function.client包中的 ClientRequestObservationConvention 的 @Bean

    低基数键

    名称描述
    method(必需)HTTP 请求方法的名称,如果无法创建请求则为 “none”。
    uri(必需)用于 HTTP 请求的 URI 模板,如果未提供则为 “none”。仅考虑 URI 的路径部分。
    client.name(必需)从请求 URI 主机派生的客户端名称。
    status(必需)HTTP 响应的原始状态代码,或者在发生 IOException 时为 “IO_ERROR”,或者如果未接收到响应则为 “CLIENT_ERROR”。
    outcome(必需)HTTP 客户端交换的结果。
    exception(必需)在交换过程中抛出的异常的名称,如果没有发生异常则为 “none”。

    高基数键

    名称描述
    http.url(必需)HTTP 请求的 URI。

    参考

    • https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator
    • https://spring.io/projects/spring-boot#learn
  • 相关阅读:
    Python3,区区几行代码,turtle替我实现了我多年的绘画梦。
    [Python进阶] 操纵鼠标:pyuserinput
    【GitHub】小技巧
    【NodeJs篇】http模块
    PLC液压控制系列之比例流量阀结构分析
    python基于轻量级卷积神经网络模型GhostNet开发构建养殖场景下生猪行为识别系统
    基于Python实现一个庆祝中秋节的小程序
    扩散模型:Diffusion models as plug-and-play priors作为即插即用先验的扩散模型
    HTTPS 加密原理
    什么是代理IP池?如何判断IP池优劣?
  • 原文地址:https://blog.csdn.net/abu935009066/article/details/133910513