SpringCloud学习笔记(三)

SpringCloud学习笔记(三)

经验文章nimo972025-03-03 11:20:589A+A-

5.openFeign

5.1. 简介

  • Feign是一个声明式的Web Service客户端,使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个接口,然后在上面添加注解.
  • 可插拔的注解支持,包括Feign注解和JAX-RS注解.
  • 支持可插拔的编码器和解码器.
  • 支持Sentinel和Fallback
  • 支持SpringCloudLoadBalancer的负载均衡
  • 支持HTTP请求和响应的压缩

5.2. 服务架构

服务消费者 -》 OpenFeign -》 服务提供者

5.3.快速上手

服务提供者:nacos-pay-provider

@RestController
public class PayAlibabaController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/pay/nacos/{id}")
    public ResultData getPayInfo(@PathVariable("id") Integer id) {
        return ResultData.success("nacos registry serverPost: " + serverPort + ", id: " + id) ;
    }

}

feign api:nacos-feign-api

@FeignClient(value = "nacos-pay-provider") //微服务对应application.name
public interface PayFeignApi {

    @GetMapping("/pay/nacos/{id}")
    public ResultData getPayInfo(@PathVariable("id") Integer id);

}

服务消费者:
cloud-consumer-openfeign-order

@RestController
public class OrderController {
    @Resource
    private PayFeignApi payFeignApi;

    @GetMapping(value = "/feign/pay/nacos/{id}")
    public ResultData getOrder(@PathVariable("id") Integer id){
        System.out.println("feign add order");
        return payFeignApi.getPayInfo(id);
    }
}

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //开启feign客户端
public class MainOpenFeign80 {
    public static void main(String[] args) {
        SpringApplication.run(MainOpenFeign80.class,args);
    }
}

5.4. OpenFeign超时控制

  • OpenFeign默认等待60s,超过60s就会报错,可以通过配置文件修改超时时间。
openfeign:
  client:
    config:
      default: # 设置feign客户端超时时间
        connectTimeout: 5000
        readTimeout: 5000
      nacos-pay-provider: # 为nacos-pay-provider服务单独设置超时时间
        connectTimeout: 5000
        readTimeout: 5000

5.5. OpenFeign重试机制

  • OpenFeign默认是没有重试机制的,需要手动配置。
  • 默认不开启OpenFeign重试机制

import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {
    @Bean
    public Retryer myRetryer(){
        return Retryer.NEVER_RETRY;
    }
}
  • 开启OpenFeign重试机制
import feign.Retryer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {
    @Bean
    public Retryer myRetryer(){
        return new Retryer.Default(100, 1000, 3);
    }
}

5.6. OpenFeign httpclient配置

  • OpenFeign默认使用的是HttpURLConnection,没有连接池,性能较差,可以切换为Apache HttpClient5

5.6.1. 引入依赖


    io.github.openfeign
    feign-hc5
    13.1


    org.apache.httpcomponents.client5
    httpclient5
    5.3.1

5.6.2. 配置文件

server:
  port: 80

spring:
  application:
    name: cloud-consumer-openfeign-order
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    openfeign:
      client:
        config:
          default: # 设置feign客户端超时时间
            connectTimeout: 5000
            readTimeout: 5000
          nacos-pay-provider: # 为nacos-pay-provider服务单独设置超时时间
            connectTimeout: 5000
            readTimeout: 5000
  httpclient:
    hc5:
      enabled: true

5.7. OpenFeign请求响应压缩

  • OpenFeign支持对请求和响应进行GZIP压缩,减少通信过程的性能损耗。
  • 细粒度设置:指定压缩的请求数据类型并设置请求压缩的大小下限,超过大小才进行压缩。
  • 配置文件
server:
  port: 80

spring:
  application:
    name: cloud-consumer-openfeign-order
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    openfeign:
      compression:
        request:
          enabled: true
          min-request-size: 2048 # 请求压缩的最小值
          mime-types: text/xml,application/xml,application/json # 请求压缩的MIME类型
        response:
          enabled: true

5.8. OpenFeign日志

  • OpenFeign提供了日志打印功能,方便开发人员排查问题。

5.8.1. 日志级别

级别

说明

NONE

不记录任何日志

BASIC

只记录请求方法、URL、响应状态码及执行时间

HEADERS

在BASIC的基础上,记录请求和响应的头信息

FULL

在HEADERS的基础上,记录请求和响应的正文信息

5.8.2. 配置日志

  • 配置类
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}
  • 配置文件
logging:
  level:
    org:
      example:
        cloud:
          apis:
            org.example.cloud.apis.PayFeignApi: debug

6.Micrometer

6.1. 简介

  • 在微服务框架中,一个由客户端发起的请求,可能会经过多个微服务,每个微服务又可能调用多个其他微服务,形成了一个复杂的调用链路,任何一环出现高延时或错误都会引起整个请求最后的失败。
  • Micrometer分布式链路追踪,就是将一次分布式请求还原成一个调用链路,对每个环节进行日志记录和性能监控,并将一次分布式请求的调用情况集中web展示从而让我们可以直观地发现错误发生在哪个环节,以及耗时主要耗费在哪个环节,便于我们快速定位问题。

6.2.分布式链路原理

  • 基于Spring Cloud Sleuth实现分布式链路追踪,Sleuth可以记录一次分布式请求的调用链路,并生成一个全局唯一的TraceID,用于标识一次分布式请求(链路),同时还会生成多个SpanID,用于标识一次分布式请求的多个阶段(请求信息)。

6.3.Zipkin

  • Zipkin是一个分布式链路追踪系统,可以收集分布式系统的服务调用数据,并生成可视化的调用链路图,方便开发人员排查问题。
  • Zipkin由两部分组成:Collector和Storage,Collector负责接收服务调用数据,Storage负责存储服务调用数据,并提供查询接口。
  • Zipkin还提供了Web UI,用于展示服务调用链路图。

6.3.1. 安装

  • 下载Zipkin

登录官网下载jar包

  • 运行Zipkin
java -jar zipkin-server-3.4.4-exec.jar

访问
http://localhost:9411/zipkin/

6.3.2. 集成

  • 引入依赖


    io.micrometer
    micrometer-tracing-bom
    ${micrometer-tracing.version}
    pom
    import


    io.micrometer
    micrometer-tracing
    ${micrometer-tracing.version}


    io.micrometer
    micrometer-tracing-bridge-brave
    ${micrometer-tracing.version}


    io.micrometer
    micrometer-observation
    ${micrometer-observation.version}


    io.github.openfeign
    feign-micrometer
    ${feign-micrometer.version}


    io.zipkin.reporter2
    zipkin-reporter-brave
    ${zipkin-reporter-brave.version}

  • 服务配置文件
management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      probability: 1.0 # 采样率默认为0.1(十次记录一次),值越大收集越及时
点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7