Open Feign 实战笔记

Open Feign笔记

概念

声明式的web服务客户端。使用接口加注解的形式编程。它是对RestTemplate和ribbon做了进一步封装。
Feign已经停更,OpenFeign是在Feign的基础上又做了进一步的封装。

Feign:

  • Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端
  • Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
  • Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。

OpenFeign:

  • OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。
  • OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

OpenFeign案例演示

1. pom文件配置

引入必要的jar包


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

2. 启动类配置

使用@EnableFeignClients注解,使当前微服务具有openfeign的功能。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class OrderOpenFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderOpenFeignMain80.class, args);
    }

}

3. 编写接口

使用@FeignClient(value = “CLOUD-PAYMENT-SERVICE”)注解指定调用的微服务名称。


import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import com.gzq.springcloud.hoxton.entities.CommonResult;
import com.gzq.springcloud.hoxton.entities.Payment;

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {

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

4. 调用OpenFeign接口

import javax.annotation.Resource;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gzq.springcloud.hoxtom.service.PaymentFeignService;
import com.gzq.springcloud.hoxton.entities.CommonResult;
import com.gzq.springcloud.hoxton.entities.Payment;

@RestController
public class OrderFeignController {

    @Resource
    private PaymentFeignService feignService;
    
    @RequestMapping(value="openfeign/consumer/payment/get/{id}")
    public CommonResult getPaymentId(@PathVariable Long id){
        return feignService.getPaymentById(id);
    }
    
}

OpenFeign连接超时设置

配置application.yml文件中ribbon的ConnectTimeout和ReadTimeout属性即可,默认情况下OpenFeign的超时时间是1秒。

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

OpenFeign日志

OpenFeign的日志级别有:

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

OpenFeign日志使用案例

1. 配置application.yml文件

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

2. 配置对应的bean

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

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

你可能感兴趣的:(spring-cloud,java,spring,微服务,ribbon,spring,cloud)