网站建设定制开发Feign基本使用(超详细)

目录

 



前言

        网站建设定制开发当我们通过调用其它服务的API时,网站建设定制开发所需要的参数须在请求的URL网站建设定制开发中进行拼接,网站建设定制开发如果参数少的话或许我网站建设定制开发们还可以忍受,网站建设定制开发一旦有多个参数的话,网站建设定制开发这时拼接请求字符串就会效率低下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、概述

        Feign是Spring Cloud提供的声明式、模板化的HTTP客户端, 它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。

        Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring 注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。

 

二、Feign入门

        注意:以下所有步骤实现的前提是需要在启动类上加入注解 @EnableFeignClients 主要是为开启feign接口扫描

        1.创建服务提供者(provider)

导入依赖:

<!--Spring Cloud OpenFeign Starter --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

代码如下(示例):

        在服务提供者中调用servic层获取数据

  1. //创建服务提供者
  2. @RestController
  3. @RequestMapping("/provider")
  4. public class ProviderController {
  5. @Autowired
  6. private UserService userService;
  7. @RequestMapping("/getUserById/{id}")
  8. public User getUserById(@PathVariable Integer id){
  9. return userService.getUserById(id);
  10. }
  11. }

        2.创建feign接口    

代码如下(示例):

        解释都放在了代码中,可以直接复制粘贴

  1. /**
  2. * @FeignClient 一般采用服务名进行命名
  3. * name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
  4. * url: url一般用于调试,可以手动指定@FeignClient调用的地址
  5. *
  6. * @RequestMapping 主要用于feign框架拼接传递url,弥补了Ribbon的url需要手动拼接的缺陷
  7. * @PathVariable("id") 当路径为restful风格时路径传参方式
  8. * @RequestParam("id") 当路径为?id=250 时传参方式
  9. * @RequestBody User user 当路径为对象时采用的传参方式,(集合、数组等都属于对象)
  10. */
  11. @FeignClient("feign-provider")
  12. @RequestMapping("/provider")
  13. public interface UserFeign {
  14. @RequestMapping("/getUserById/{id}")
  15. User getUserById(@PathVariable("id") Integer id);
  16. @RequestMapping("/deleteUserById")
  17. User deleteUserById(@RequestParam("id") Integer id);//?形式拼接参数,?id=250
  18. @RequestMapping("/addUser")
  19. User addUser(@RequestBody User user);//pojo--->json
  20. }

        3、创建服务消费者(consumer)

  1. //服务消费者
  2. @RestController
  3. @RequestMapping("/consumer")
  4. public class ConsumerController {
  5. @Autowired
  6. private UserFeign userFeign;
  7. @RequestMapping("/getUserById/{id}")
  8. public User getUserById(@PathVariable Integer id){
  9. return userFeign.getUserById(id);
  10. }
  11. }

        application.yml文件

server:
  port: 80
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.209.129:8848
  application:
    name: feign-consumer

 三、Feign 原理

1、将feign接口的代理类扫描到Spring容器中:
        @EnableFeignClients开启feign注解扫描:FeignClientsRegistrar.registerFeignClients()扫描被 @FeignClient标识的接口生成代理类,并把接口和代理类交给Spring的容器管理。
    2、为接口的方法创建RequestTemplate
        当consumer调用feign代理类时,代理类会调用SynchronousMethodHandler.invoke()创建RequestTemplate(url,参数)
    3、发出请求
        代理类会通过RequestTemplate创建Request,然后client(URLConnetct、HttpClient、OkHttp)使用Request发送请求

四、Feign优化

        1、开启feign日志

                feign日志级别

         在consumer的yml文件中加入以下代码

  1. feign:
  2. client:
  3. config:
  4. feign-provider: #此处写的是服务名称,针对我们feign微服务的配置,如果是default就是全局配置
  5. loggerLevel: full #配置Feign的日志级别,相当于代码配置方式中的Logger
  6. #在application.yml中使用 logging.level.<Feign客户端对应的接口的全限定名> 的参数配置格式来开启指定客户端日志
  7. logging:
  8. level:
  9. com.bjpowernode.feign: debug

随后启动测试:

        出现以下结果表示日志输出成功 

        2、feign超时问题

        首先、Feign的负载均衡底层用的就是Ribbon,所以这里的请求超时配置其实就是配置Ribbon,当出现请求超时会出现以下报错。

注意 :当开启日志配置之后,feign超时问题不会出现报错情况。

        针对超时问题我们需要在之前的日志配置中加入以下内容

ConnectTimeout: 5000 #请求连接的超时时间

ReadTimeout: 5000 #请求处理的超时时间

         3、http连接池

          1、连接池介绍

        首先,我们知道HTTP连接需要经过三次握手,四次挥手的过程,这是很耗费性能的;所以HTTP连接池帮助我们节省了这一步。

        同时Feign的HTTP客户端支持三种框架:

        HttpURLConnection、HttpClient、OkHttp;默认是HttpURLConnection

         2、连接池使用

         先引入依赖到公共接口工厂interfac,如果没有做公共接口就放入consumer

<dependency>

<groupId>io.github.openfeign</groupId>

<artifactId>feign-httpclient</artifactId>

</dependency>

讲真的,其实这已经完成了,但是,我们还是要知道一下它的原理,否则显得太片面了

在配置文件中我们看到,连接池引入之后默认是开启的,所以我们就不用再写了

         4、gzip压缩

压缩能力

        当 Gzip 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少 70%以上的文件大小。·

这个开启也是比较简单,只需要在consumer中yml文件中写入以下代码即可

此时在浏览器中就可以看到我们提供的压缩方式,和浏览器支持的压缩方式 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发