OpenFeigin服务接口调用

一、简介

1、OpenFeign简介

​ Feign 是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。具有可插入注释支持,包括Feign注释和JAX-RS注释;支持可插拔式的编码器和解码器。Spring Cloud 对Feign进行了封装,使其支持了SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。官方文档地址:https://cloud.spring.io/spring-cloud-openfeign/reference/html/

2、Feign 与OpenFeign 的区别

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

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>
    
  • OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    

二、OpenFeign使用步骤

1、建立一个新模块,在pom文件中引入Feign的依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、在主启动类上加注解 @EnableFeignClients 开启Feign;

3、在消费者端创建一个接口,接口中的方法是服务提供者中的方法;

@Component
//添加Feign注解,value=要寻找的微服务名称
@FeignClient("CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
    @GetMapping("/payment/get/{id}")
    CommonResult getPaymentById(@PathVariable("id") Long id);
}

4、定义自己的业务类,调用 Feign 接口中的方法即可,不用在手动的去引入RestTempLate。

@Resource
private PaymentFeignService paymentFeignService;
@GetMapping("/consumer/payment/get/{id}")
public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
    return paymentFeignService.getPaymentById(id);
}

三、OpenFeign超时控制

1、描述

​ 消费者方与服务提供方之间对于服务的请求处理时间存在时间差,会超时导致程序报错。为解决这个问题,需要双方对于某些业务进行一些约定,保证程序正常运行。超时请求报错页面如下:

2、超时设置,在消费端的application.yml添加以下配置。

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

四、OpenFeign 日志打印

1、Feign 提供了日志打印功能,可以通过配置来调整日志级别,从而了解Feign中的Http请求的细节,对接口的调用情况进行监控和输出。

2、日志级别

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

3、配置方法

  • 定义一个配置类

    @Configuration
    public class FeignConfig {
    
        @Bean
        Logger.Level feignLoggerLevel(){
            return Logger.Level.FULL;
        }
    }
    
  • 修改yml文件

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

案例代码地址:https://github.com/xhanglog/springcloud-learning

posted @ 2020-03-24 12:49  xhanglog  阅读(494)  评论(0编辑  收藏  举报