OpenFeign原理及其使用方法

目录

1、OpenFeign基础

1.1、概念

1.2、作用

1.3、Feign和OpenFeign区别

2、OpenFeign使用步骤

2.1、创建Feign消费端微服务

2.2、修改POM文件配置

2.3、编写yaml配置文件

2.4、编写主启动类

2.5、编写业务类

2.5.1、编写 service 层接口,用于服务提供者接口的远程调用

2.5.2、编写 controller 层,用于url映射和service调用

2.6、测试

3、OpenFeign超时控制

3.1、超时情况

3.2、设置超时时间

4、OpenFeign 日志打印

4.1、功能描述

4.2、日志级别

4.3、日志配置

4.3.1、配置日志bean

4.3.2、YML文件里需要开启日志的Feign客户端

4.4、打印结果


1、OpenFeign基础

1.1、概念

  • Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易
  • 只需创建一个接口并在接口上添加注解即可

1.2、作用

 简化远程API,调用过程

 采用feign前:Ribbon+RestTemplate

    //获取用户信息
    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult getPayment(@PathVariable("id") Long id) {
        return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
    }

 采用feign后:只需要像调用接口一样,实现远程调用

//controller:
@RestController
@Slf4j
public class OrderFeignController {
    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id){
        return paymentFeignService.getPaymentById(id);
    }
}

//service:
@Component
@FeignClient(value = "cloud-payment-service")   //需要寻找的微服务名称
public interface PaymentFeignService {

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id);
}

1.3、Feign和OpenFeign区别

OpenFeign原理及其使用方法_第1张图片

2、OpenFeign使用步骤

采用 接口+注解 的方式使用,即微服务调用接口+@FeignClient

2.1、创建Feign消费端微服务

OpenFeign原理及其使用方法_第2张图片

2.2、修改POM文件配置

添加依赖


        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
            com.uclass.springcloud
            Api-Commons
            1.0-SNAPSHOT
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-actuator
        

        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        

        
            org.projectlombok
            lombok
            true
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

    

2.3、编写yaml配置文件

server:
 port: 80

eureka:
 client:
  register-with-eureka: false
  service-url:
   defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka

2.4、编写主启动类

 类上添加 @EnableFeignClients 注解,表示 Feign 客户端

@EnableFeignClients     //激活对Feign的使用
@SpringBootApplication
public class OrderFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignMain80.class, args);
    }
}

2.5、编写业务类

2.5.1、编写 service 层接口,用于服务提供者接口的远程调用

service层:注意添加 @FeignClient(value = "cloud-payment-service") 注解,其中value值表示需要远程调用的微服务名称

@Component
@FeignClient(value = "cloud-payment-service")   //需要寻找的微服务名称
public interface PaymentFeignService {

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id);
}

远程调用的服务提供者的接口:

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id) {
        Payment payment = paymentService.getPaymentById(id);
        log.info("插入结果:" + payment);

        if(payment != null) {
            return new CommonResult(200, "查询成功,serverPort:" + serverPort, payment);
        } else {
            return new CommonResult(444, "没有对应记录,查询ID:" + id);
        }
    }

2.5.2、编写 controller 层,用于url映射和service调用

@RestController
@Slf4j
public class OrderFeignController {
    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id){
        return paymentFeignService.getPaymentById(id);
    }
}

2.6、测试

1)先启动2个eureka集群7001/7002

2)再启动2个微服务8001/8002

3)启动OpenFeign启动

4)访问:http://localhost/consumer/payment/get/31

5)得到结果(Feign自带负载均衡配置项)

OpenFeign原理及其使用方法_第3张图片

3、OpenFeign超时控制

3.1、超时情况

 Feign客户端调用远程接口时,默认会等待1秒钟,如果服务端处理,超过1秒钟则会报错

3.2、设置超时时间

在 application.yaml 配置文件中设置超时时长

#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
# 表示建立连接后从服务器读取到可用资源,所用时间
 ReadTimeout:  5000
# 表示建立连接时间,适用于网络正常的情况下,两端连接所用时间
 ConnectTimeout: 5000

4、OpenFeign 日志打印

4.1、功能描述

对 Feign 接口的调用情况进行监控和输出,通过配置,调整日志级别,从而了解 Feign 中 Http 请求的细节。

4.2、日志级别

  • NONE:默认的,不显示任何日志
  • BASIC:仅记录请求方法、URL、响应状态码及执行时间
  • HEADERS:除了 BASIC 中定义的信息外,还有请求和响应的头信息
  • FULL:除了 HEADERS 中定义的信息外,还有请求和响应的正文及元数据

4.3、日志配置

4.3.1、配置日志bean

OpenFeign原理及其使用方法_第4张图片

  注意:Logger 引入的是 import feign.Logger 包下的

@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

4.3.2、YML文件里需要开启日志的Feign客户端

logging:
 level:
  #feign日志以什么级别监控哪个接口
  com.uclass.springcloud.service.PaymentFeignService: debug

4.4、打印结果

OpenFeign原理及其使用方法_第5张图片

 

你可能感兴趣的:(微服务技术栈,java,spring,cloud)