首页 > 其他分享 >自定义Feign配置

自定义Feign配置

时间:2024-05-23 22:07:00浏览次数:12  
标签:Feign 服务 自定义 配置 feign 接口 模块 服务提供者 userservice

  1. java代码的方式

    • 写一个配置类
    public class FeignConfig {
        /**
         * 将契约改为feign原生的默认契约。这样就可以使用feign自带的注解了。
         * @return 默认的原生契约
         */
        @Bean
        public Contract feignContract(){
            return new Contract.Default();
        }
    }
    
    • 在注解上添加该类
    @FeignClient(name="user-provider",configuration = FeignConfig.class)
    public interface UserFeignClient {
        /**
         * 使用feign自带的注解@RequestLine
         * @param id
         * @return
         */
        @RequestLine("GET /user/{id}")
        User getById(@Param("id") Integer id);
    }
    
  2. 配置文件中配置

    feign:
      client:
        config:
          user-provider:  # 写了这个就是对某个服务,若用default就是全局设置
            connectTimeout: 5000
            readTimeout: 5000
            loggerLevel: full
            encoder: feign.form.spring.SpringFormEncoder
            requestInterceptors:
              - com.example.feign2.interceptor.RequestHeaderInterceptor
    
  3. 日志

    • Logger.Level的值有以下选择:

      • NONE: 不记录任何日志(默认值)
      • BASIC: 仅记录请求方法、URL、响应状态代码以及执行时间。
      • HEADERS: 记录basic级别的基础上,记录请求和响应的header。
      • FULL: 记录请求和响应的header、body和元数据。
  4. 性能调优

    • feign底层客户端实现默认使用的是URLConnection,这是jdk自带的发送http请求的包,不支持连接池;这样在发送http请求时,每次都要建立连接(三次握手),发送数据,断开连接(四次挥手),比较浪费性能、消耗时间

    • 推荐使用另外两种底层实现(OKHttp,Apache HttpClient其中更推荐Apache HttpClient);

    • 日志级别推荐设置basic和none,性能更好

    • 引入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
    • 添加配置
    feign:
      client:
        config:
          default: # default全局的配置
            loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
      httpclient:
        enabled: true # 开启feign对HttpClient的支持
        max-connections: 200 # 最大的连接数
        max-connections-per-route: 50 # 每个路径的最大连接数
    
  5. 最佳实践

    • 方式一:继承与实现(不怎么推荐)
      feign的客户端(服务消费者)和服务端(服务提供者)定义一个统一的父接口,这样统一管理,更加系统化
      缺点:高耦合

    • 方式二:抽取(推荐使用)
      以前是客户端(服务消费者)写一套对服务端(服务提供者)的feign接口,这样当服务增多,每个服务都要写一套对该服务端的feign接口,且修改时也要一一修改;
      现在反过来,由服务提供者自己抽取出一个feign的独立模块,其他服务中引入这个模块,即可调用这个服务了,缺点是消费者不能选择某个服务者中某个单一的服务进行消费

    • 解释:userservice为服务提供者,orderservice为服务消费者,那我只需要新增(抽取)一个模块,对userservice所有的对外接口、实体类都写到这个模块(feign接口模块)里面来,那么其他所有的模块要使用userservice模块,向userservice发送请求,只需引入userservice的那个feign接口模块,即可使用,所有的服务消费者都使用userservice提供的这一套feign接口

    • 创建一个module,命名为feign-api,然后引入feign的starter依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
    • 将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中

    • 在order-service中引入feign-api的依赖

    • 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包

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

    • 指定Feign应该扫描的包:

    @EnableFeignClients(basePackages = "cn.itcast.feign.clients")
    
    • 指定需要加载的Client接口:
    @EnableFeignClients(clients = {UserClient.class})
    

标签:Feign,服务,自定义,配置,feign,接口,模块,服务提供者,userservice
From: https://www.cnblogs.com/hytip/p/18209467

相关文章

  • Feign的介绍与使用
    什么是Feign?Feign是声明式WebService客户端,它让微服务之间的调用变得更简单。为什么使用Feign?Feign旨在使编写JavaHttp客户端变得更容易;之前在使用Ribbon+RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对......
  • 安装配置intelli IDEA
    效果操作去官网下载安装包下载IntelliIDEA下载插件插件下载打开IDEA安装目录下的bin目录,找到idea64.exe.vmoptions配置文件添加配置打开indea,添加激活码9PPM13JQQY-eyJsaWNlbnNlSWQiOiI5UFBNMTNKUVFZIiwibGljZW5zZWVOYW1lIjoiY2F0IG1ldGhvZCIsImFzc2ln......
  • 配置kdump使用的debug内核
    1.背景在ubuntu20.04上使用自己编译的内核配置kdump,发现kdump的内存用量特别大,我从1024M开始,每次加128M进行测试,直到1536M才能成功转储。这应该和我编译的内核尺寸有关,/var/lib/kdump目录下的initrd.img足足有三百多M:这样占用1.5个G的空间确实很浪费。而且这个值还不能过大,比......
  • kubernetes部署mongoDB 单机版 自定义配置文件、密码、日志路径等
    官方镜像地址:https://hub.docker.com/_/mongo?tab=descriptiondocker版的mongo移除了默认的/etc/mongo.conf,修改了db数据存储路径为/data/db.创建configmap配置,注意不能加fork=true,否则Pod会变成Completed。apiVersion:v1kind:ConfigMapmetadata:name:mongodb-confdat......
  • Android JNI/NDK环境的配置与Demo编译
    一、背景​JNI(JavaNativeInterface)和NDK(NativeDevelopmentKit)在Android开发中扮演着重要的角色。JNI,即Java本地接口,是Java平台的一部分,它允许Java代码与其他语言写的代码进行交互。通过JNI,Java代码可以调用本地应用程序或库中的代码,也可以被本地代码调用。这主要使得......
  • AnolisOS7.9安装Jenkins及配置
    需要jdk11或17支持1.配置源1sudowget-O/etc/yum.repos.d/jenkins.repohttps://pkg.jenkins.io/redhat-stable/jenkins.repo2sudorpm--importhttps://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key2.如提示证书过期则安装ca-certificates1yuminstall-......
  • mysql8.0 PXC安装配置
    一、环境初始化1.时间同步配置/etc/chrony.conf,添加如下:server0.centos.pool.ntp.orgiburst#指定时钟源allow192.168.43.0/24重启服务:systemctlrestartchronyd.service开机启动:systemctlenablechronyd查看状态:systemctlstatuschronyd验证端口:netstat......
  • 原始配置字符串进行解析并转换为字典
    varconfigPairs=mqttConfig.Split(';').Select(pair=>pair.Split('=')).Where(parts=>parts.Length==2).ToDictionary(parts=>parts[0].Trim(),parts=&g......
  • GitHub SSH 快速配置
    每次更换系统或者电脑时,都需要重新配置一番GithubSSH的验证,记性不太好,写了一个快速部署的辅助脚本,直接安装脚本提示使用即可,经测试,Linux和Windows下均能使用。脚本功能设置Git用户名和邮箱脚本会提示用户输入Git用户名和邮箱,并将其设置为全局配置。生成新的......
  • 帆软——目录及权限配置
    1.登录报表平台管理 2.打开后,需要自己注册下账户,然后登录登录后,我们可以看到很多的目录,这些都是帆软自带的,可以自己编辑 3.进入系统管理添加目录和模版,   4.在用户管理和权限管理中配置对应的用户和菜单权限。 ......