SpringCloud之Feign发送Http请求

文章目录

    • http客户端Feign
      • 使用步骤
      • 自定义Feign的配置
      • Feign的性能优化
        • Feign的性能优化-连接池配置
      • Feign的最佳实践

http客户端Feign

Feign的介绍
Feign是一个声明式的http客户端,官方地址:https:/github.com/OpenFeign/feign
其作用就是帮助我们优雅的实现http请求的发送。

使用步骤

使用Feign的步骤如下:

  1. 引入依赖:

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  2. 在order-server的启动类添加注解开启Feign的功能:

    @EnableFeignclients
    @MapperScan("cn.itcast.order.mapper")
    @SpringBootApplication
    public class OrderApplication{public static void main(String[]args){SpringApplication.run(OrderApplication.class,args);}
    }
    
  3. 编写Feign客户端:

    //在消费者服务中编写,其中@Feignclient的值为提供者的服务名
    @Feignclient("user-server")
    public interface Userclient{@GetMapping("/user/{id}")User findById(@PathVariable("id")Long id);
    }
    

    主要是基于SpringMVC的注解来声明远程调用的信息,比如:

    • 服务名称:user-server
    • 请求方式:GET
    • 请求路径:/user/{id}
    • 请求参数:Long id
    • 返回值类型:User

自定义Feign的配置

Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送
feign.Contract支持的注解格式默认是SpringMVC的注解
feign.Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

一般我们需要配置的就是日志级别。

配置Feign日志有两种方式:
方式一:配置文件方式
①全局生效:

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

②局部生效:

feign:client:config:user-server: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置LoggerLevel: FULL #日志级别		

配置Feign日志的方式二:

java代码方式,需要先声明一个Bean:

public class FeignClientConfiguration{@Beanpublic Logger.Level feignLogLevel(){return Logger.Level.BASIC;}
}	

①而后如果是全局配置,则把它放到@EnableFeignClients这个注解中:

@EnableFeignClLients(defaultConfiguration = FeignclientConfiguration.class)

②如果是局部配置,则把它放到@FeignClient这个注解中:

@Feignclient(value="user-server",configuration=FeignclientConfiguration.class)

Feign的性能优化

Feign底层的客户端实现:

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

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

  1. 使用连接池代替默认的URLConnection
  2. 日志级别,最好用basic或none
Feign的性能优化-连接池配置

Feign添加HttpClient的支持:
引入依赖:

<!--httpCLient的依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>

配置连接池:

feign:client:config:default: #default全局的配置LoggerLevel: BASIC #日志级别,BASIC.就是基本的情求和响应信息httpclient:enabled: true #开启feign对HttpClient的支特max-connections: 200 #最大的连接数max-connections-per-route: 50 #每个路径的最大连接数

Feign的最佳实践

方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。

方式二(抽取):将FeignClienta抽取为独立模块,并且把接口有关的POJO、默认的Feigni配置都放到这个模块中,提供
给所有消费者使用。

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

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

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

@EnableFeignclients(basePackages = "cn.itcast.feign.clients")

方式二:指定FeignClient:字节码

@EnableFeignClients(clients = {Userclient.class})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/471935.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数

1. 什么是递归&#xff1f; 递归其实是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 下面是一个最简单的C语言递归代码&#xff1a; #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main函数…

多线程面试题汇总

多线程面试题汇总 一、多线程1、线程的生命周期2、线程的创建&#xff08;函数创建&#xff09;3、线程的创建&#xff08;使用类&#xff09;4、守护线程 二、全局解释器锁1、使用单线程实现累加到5000000002、使用多线程实现累加到5000000003、总结 三、线程安全1、多线程之数…

Fiddler抓包(网页、手机、MUMU模拟器)

前置条件&#xff1a;电脑上下载安装好了Fiddler&#xff0c;有浏览器 一、网页抓包 1、fiddler下载安装证书 Tools-Options 勾选下面两个框 点击下面的选项&#xff0c;信任证书 会弹出弹窗&#xff0c;点击yes&#xff08;这个时候注意&#xff0c;DO_NOT_TRUST_FiddlerRo…

【Linux网络编程六】服务器守护进程化Daemon

【Linux网络编程六】服务器守护进程化Daemon 一.背景知识&#xff1a;前台与后台二.相关操作三.Linux的进程间关系四.自成会话五.守护进程四步骤六.服务器守护进程化 一.背景知识&#xff1a;前台与后台 核心知识就是一个用户在启动Linux时&#xff0c;都会给一个session会话&a…

Open AI 王炸,新Sora模型 一句话生成 1 分钟视频,效果接近实拍。

自从Openai推出了Chatgpt&#xff0c;彻底拉开了AI革命的序幕&#xff0c;我们见证了越来越多AI产品的兴起&#xff0c; 以前只敢想一想的东西&#xff0c;到现在真的变成了现实。 就比如前段时间刚刚发售的 Vision Pro 人们甚至戴上眼镜就可以实现办公&#xff0c;只要动一动…

基于Java (spring-boot)和微信小程序的奶茶点餐小程序

一、项目介绍 基于Java (spring-boot)和微信小程序的奶茶点餐小程序功能&#xff1a;客户端登录、个人中心、点餐、选规格、去结算、取餐、我的信息、管理员登录、管理员首页、用户管理、商品管理、商品编辑、商品种类、订单管理、订单处理、等等等。 适用人群&#xff1a;适合…

安装 Windows Server 2019

1.镜像安装 镜像安装:Windows Server 2019 2.安装过程(直接以图的形式呈现) 先选择""我没有产品密钥"",选择桌面体验 选择自定义 设置密码后继续 安装成功

计网物理层

通信基础 基本概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 其主要任务是确定与传输媒体接口有关的一些特性&#xff0c;即定义标准。 机械特性&#xff1a;定义物理连接的特性&#xff0c;规定物理连接时所采用的…

算法沉淀——优先级队列(堆)(leetcode真题剖析)

算法沉淀——优先级队列 01.最后一块石头的重量02.数据流中的第 K 大元素03.前K个高频单词04.数据流的中位数 优先队列&#xff08;Priority Queue&#xff09;是一种抽象数据类型&#xff0c;它类似于队列&#xff08;Queue&#xff09;&#xff0c;但是每个元素都有一个关联的…

重磅!OpenAI发布文生视频模型Sora——视频模型的奇点或许来临!!

文章目录 1 卓越能力1.1 60s超长时间 高度详细复杂的场景1.2 复杂的相机运动1.3 同一场景多个镜头 2 技术原理3 不足4 安全战略5 碎碎念 OpenAI发布文生视频模型Sora——视频模型的奇点或许来临&#xff01;&#xff01; 初七啦&#xff0c;得开始工作了&#xff0c;没想到第一…

彻底理解无刷电机

前言 现在很多设备都是搭载的无刷电机而不是有刷电机了&#xff0c;为啥&#xff1f;性能好啊&#xff01; 引入 同性相斥异性相吸 可以看出&#xff0c;只要改变磁铁的极性&#xff0c;电机就能转起来 那 怎么改变磁铁极性呢&#xff1f; 右手螺旋定则可以根据电流的流向…

tcp 中使用的定时器

定时器的使用场景主要有两种。 &#xff08;1&#xff09;周期性任务 这是定时器最常用的一种场景&#xff0c;比如 tcp 中的 keepalive 定时器&#xff0c;起到 tcp 连接的两端保活的作用&#xff0c;周期性发送数据包&#xff0c;如果对端回复报文&#xff0c;说明对端还活着…