微服务--Feign学习
创始人
2024-05-24 04:32:21
0
  • Feign远程调用:

    • RestTemplate发起远程调用的代码:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrQlIktO-1675949482462)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206175759882.png)]
      存在下面的问题

      • 代码可读性差,编程体验不统一
      • 参数复杂URL难以维护
    • Feign的介绍:Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LX14pPH3-1675949482463)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206180308491.png)]

    • Feign替代RestTemplate:使用Feign的步骤如下

      1. 引入依赖:

           org.springframework.cloudspring-cloud-starter-openfeign
        
      2. 在order-service的启动类添加注解开启Feign的功能:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Exi3mZdR-1675949482464)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206180929228.png)]

      3. 编写Feign客户端:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFVZllZR-1675949482464)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206191317837.png)]

      4. 用Feign客户端代替RestTemplate
        在这里插入图片描述

    • 自定义配置:Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZSTDBTNA-1675949482465)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230207112857901.png)]

      • 方式一:配置文件方式

        1. 全局生效:

          feign:client:config:default: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #日志级别
          
        2. 局部生效:

          feign:client:config:userservice: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #日志级别
          
      • 方式二:Java代码方式,需要先声明一个Bean:

        public class FeignClientConfiguration {@Beanpublic Logger.Level feignLogLevel(){return Logger.Level.FULL;}
        }
        
        1. 全局配置,则把它放到@EnableFeignClients这个注解中:

          @EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
          
        2. 如果是局部配置,则把它放到@FeignClient这个注解中:

          @FeignClient(value = "userservice",configuration = FeignClientConfiguration.class)
          
    • Feign使用优化

      Feign底层的客户端实现:

      • URLConnection:默认实现,不支持连接池
      • ApacheHttpClient:支持连接池
      • OKHttp:支持连接池

      因此优化Feign的性能主要包括:

      1. 使用连接池代替默认的URLConnection
      2. 日志级别,最好用basic或none

      Feign的性能优化-连接池配置

      Feign添加HttpClient的支持:

      引入依赖:

            io.github.openfeignfeign-httpclient
      

      配置连接池:

      feign:httpclient:enabled: true #开启feign对HttpClient的支持max-connections: 200 #最大的连接数max-connections-per-route: 50 #每个路径的最大连接数
      
    • Feign最佳实践

      • 方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GlVR7SVy-1675949482466)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230207153106143.png)]

      • 方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO,默认的Feign配置都放到这个模块中,提供给所有消费者使用[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YECFRELP-1675949482467)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230207153847247.png)]

    • 实现最佳实践方式二的步骤如下:

      1. 首先创建一个module,命名为feign-api,然后引入feign的starter依赖
      2. 将order-service中的编写的UserClient,User,DefaultFeignConfiguration都复制到feign-api项目中
      3. 在order-service中引入feign-api的依赖
      4. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包

      当定义的FeignClient不在SpringBootApplication的扫描范围时,这些FeignClient无法使用。有两种方式解决:

      1. 方式一:指定FeignClient所在包

        @EnableFeignClients(basePackages = "com.cdcas.feign")
        
      2. 方式二:指定FeignClient字节码

        @EnableFeignClients(clients = {UserClient.class})
        

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...