• 服务调用之OpenFeign客户端工具使用


    一、什么是OpenFeign?

      要理解OpenFeign,先理解Feign。Feign是一个声明式的WebService客户端,她的目标是让编写JavaHttp客户端更加容易。Spring Cloud对Feign进行了封装,使其支持了Spring MNC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。之前的微服务常规调用是通过Ribbon+RestTemplate,在实际开发中,往往一个接口会被多处调用,所以我们需要把微服务调用模块进行封装,形成调用客户端,Feign在此基础上进行了封装,它帮助我们完成对服务提供方的接口绑定,减化使用springcloudRibbon时自行封装调用客户端的开发量,我们只需要创建一个接口,通过在接口上添加注解来完成功能实现(类似Dao接口上使用@Mapper一样)。

      Feign本身集成了Ribbon,实现了客户端的负载均衡,而OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC注解,OpenFeign已经全面替代了Feign。OpenFeign的@FeignClient注解可以解析@RequestMapping注解的接口,动态代理产生实现类,在实现类中做负载均衡并调用微服务。由于OpenFeign的作用是服务调用,因此它使用在服务消费者中,而不是服务提供者中。

    二、OpenFeign服务调用

      1、使用OpenFeign首先需要引入jar包,引入方式如下

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

      2、在主启动类中增加@EnableFeignClients注解

      3、书写业务逻辑接口,在接口上增加@FeignClient注解,例如:

    @Component
    @Feignclient(value = "CLOUD-PAYMENT-SERVICE")   /* value的值为要调用的微服务模块的名称,注意这里不要加http:// */
    public interface PaymentFeignservice
    {
       GetMapping(value = "/payment/get/id}")  /* value的值为服务模块具体的控制器方法 */
       public commonResult<Payment> getPaymentById(@Pathvariable("id") Long id);
    }

       注意:通常一个微服务就对应一个接口类,接口类中的方法对应微服务对外提供的方法。上面的代码表示调用CLOUD-PAYMENT-SERVICE 服务的/payment/get/id方法。

      4、控制层调用以上封装的接口,完成业务逻辑处理

    @Component
    public class orderFeigncontroller
    {
    @Resource
    private PaymentFeignservice paymentFeignservice;
      @GetMapping(value = "/consumer/payment/get/{fid}")
      public commonResult<Payment> getPaymentById(@Pathvariable("id") Long id)
     {
        return paymentFeignservice.getPaymentById(id);
     }
    }

     三、OpenFeign超时控制

      服务调用一定会产生超时的情况,OpenFeign默认等待调用服务接口的超时时间是1秒,超过1秒后就会自己抛出超时错误。有些情况下我们根据需求需要调整超时等待时间,可以在yml配置文件中开启配置,OpenFeign的超时时间设置是由集成的Ribbon来控制的,代码如下

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

    四、OpenFeign日志增强管理功能

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

      1、日志级别说明:

          NONE-->默认,不显示任何日志

          BASIC-->仅记录请求方法、URL、响应状态码、执行时间

          HEADERS-->BASIC+请求头信息+响应头信息

          FULL-->HEADERS+请求和响应的正文及元数据

      2、配置日志打印功能:新建配置文件夹config,添加配置文件类FeignConfig,导入feign.Logger,写入如下代码

    @Configuration
    public class Feignconfig
    {
       @Bean
       Logger.Level feignLoggerLevel()
      {
         return Logger.Leve1.FULL;  /* 表示开启详细日志 */
      }
    }

       3、yml配置文件中,配置日志以什么级别来监控哪个接口(这里的级别不是1中的级别)。如下表示以dubug级别来监控PaymentFeignservice接口

    logging:
     level:
        # feign日志以什么级别监控哪个接口
       com.atguigu.springcloud.service.PaymentFeignservice: debug
  • 相关阅读:
    选择主要的构建实践方法(转) Tech
    201671010109 201620172《java程序设计》第一周感想
    201671010109 201720162第二周学习感想
    2016710101090 20162017《java程序设计》第三周感想
    sort k 详解
    java.util.NoSuchElementException: None.get的解决方法
    Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace 解决方法
    Java学习随笔之1: Java 语言概述和开发环境
    java 学习随笔之2:理解面向对象
    Selenium Basic Knowledge
  • 原文地址:https://www.cnblogs.com/zqhIndex/p/15396508.html
Copyright © 2020-2023  润新知