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.mzph.cn/news/684831.shtml

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

相关文章

laravel_进程门面_简单介绍

文章目录 Facade是什么&#xff1f;Facade能干什么Facade有哪些方法&#xff1f;怎么使用Facade呢&#xff1f;详细的代码解释Symfony Process是什么&#xff1f;介绍Symfony总结 Facade是什么&#xff1f; 在 Laravel 框架中&#xff0c;Facade 是一种设计模式。 它提供了一…

476. Number Complement(数字的补数)

问题描述 对整数的二进制表示取反&#xff08;0 变 1 &#xff0c;1 变 0&#xff09;后&#xff0c;再转换为十进制表示&#xff0c;可以得到这个整数的补数。 例如&#xff0c;整数 5 的二进制表示是 “101” &#xff0c;取反后得到 “010” &#xff0c;再转回十进制表示…

java8默认方法

口什么是默认方法 口如何以一种兼容的方式改进API 口默认方法的使用模式 口 解析规则 传统上&#xff0c;Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现&#xff0c;或者从父类中继承它的实现。但是&#xff0c;一…

NLP_Transformer架构

文章目录 Transformer架构剖析编码器-解码器架构各种注意力的应用Transformer中的自注意力Transformer中的多头自注意力Transformer中的编码器-解码器注意力Transformer中的注意力掩码和因果注意力 编码器的输入和位置编码编码器的内部结构编码器的输出和编码器-解码器的连接解…

计网物理层

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

模型 4R(关联、反应、关系、回报)理论

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_总纲目录。重在提升认知。以关系促营销。 1 4R(关联、反应、关系、回报)理论的应用 1.1 4R模型在小米客户关系管理中的应用 小米公司是一家以生产智能手机和消费电子产品而闻名的公司&#xff0c;它在客户关系管理…

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程 一、配置MS-DOS虚拟机机器环境二、安装MS-DOS磁盘操作系统 一、配置MS-DOS虚拟机机器环境 1.打开VMware Workstation Pro 2.新建虚拟机 3.建议选择【典型】&#xff0c;之后点击【下一步】 关于【自定义…

在spring中操作Redis

目录 创建项目 ​编辑 配置Redis 创建类 StringRedisTemplate set / get list set Hash zset 新年快乐&#xff01;&#xff01;&#xff01;&#xff01; 创建项目 选中maven项目&#xff0c;然后选择java8&#xff0c;输入名称之后&#xff0c;点击next。 随后选择…

C++多重继承

C多重继承 C中的多重继承是指一个类可以从多于一个的基类派生出来&#xff0c;这允许在一个派生类中继承多个基类的特性和行为。多重继承增加了C的灵活性和表达能力&#xff0c;但同时也带来了一些复杂性&#xff0c;如菱形继承问题和潜在的命名冲突。 基本用法 定义一个多重…

C++中类的6个默认成员函数 【拷贝构造函数】

文章目录 拷贝构造函数的使用拷贝构造对于自定义类型【浅拷贝】深拷贝拷贝构造函数典型调用场景 拷贝构造函数的使用 在前几章学习对象的时候&#xff0c;我们有的时候需要一个与已存在对象一某一样的新对象 那在创建对象时&#xff0c;可否创建一个与已存在对象一某一样的新对…

(02)Hive SQL编译成MapReduce任务的过程

目录 一、架构及组件介绍 1.1 Hive底层架构 1.2 Hive组件 1.3 Hive与Hadoop交互过程 二、Hive SQL 编译成MR任务的流程 2.1 HQL转换为MR源码整体流程介绍 2.2 程序入口—CliDriver 2.3 HQL编译成MR任务的详细过程—Driver 2.3.1 将HQL语句转换成AST抽象语法树 词法、语…

C# CAD SelectionFilter下TypedValue数组

SelectionFilter是用于过滤AutoCAD实体的类&#xff0c;在AutoCAD中&#xff0c;可以使用它来选择具有特定属性的实体。构造SelectionFilter对象时&#xff0c;需要传入一个TypedValue数组&#xff0c;它用于定义选择规则。 在TypedValue数组中&#xff0c;每个元素表示一个选…

VScode中配置 C/C++ 环境 | IT拯救者

文章目录 0 引言1. 下载编辑器VScode2. 下载编译器MinGW并解压3. 将MinGW添加至环境变量4. 配置VScode插件5. 运行代码6. 调整和优化7. 提示8. 例行格式条款9. 例行格式条款 0 引言 由于VScode毛毛张使用不习惯&#xff0c;因此配置教程记不住&#xff0c;不过毛毛张看到一篇不…

「递归算法」:两两交换链表中的节点

一、题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xf…

计算机二级数据库之数据模型(三层相关的结构)

数据模型 模型的概念 模型的介绍模型是对现实世界特征的模拟和抽象&#xff0c; 数据模型的概念&#xff1a; 数据模型是对现实世界中数据特征的抽象&#xff0c;描述的是数据的共性。 数据模型是用来在数据库中抽象、表示和处理现实世界中的数据和信凹。 其相关的共同特…

论文阅读:《Deep Learning-Based Human Pose Estimation: A Survey》——Part 1:2D HPE

目录 人体姿态识别概述 论文框架 HPE分类 人体建模模型 二维单人姿态估计 回归方法 目前发展 优化 基于热图的方法 基于CNN的几个网络 利用身体结构信息提供构建HPE网络 视频序列中的人体姿态估计 2D多人姿态识别 方法 自上而下 自下而上 2D HPE 总结 数据集…

Python二级考试笔记

Python二级考试笔记【源源老师】 01. 字符串 1. 常规功能合集 字符串本身有一些功能&#xff0c;有些之前运用过&#xff0c;这里总结如下&#xff1a; # 功能一&#xff1a;判断字符串类型 print(type("Hello")) print(str(123)) # 转换# 功能二&#xff1a;连…

相机图像质量研究(27)常见问题总结:补光灯以及遮光罩对成像的影响--遮光罩

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

[AIGC] 消息积压了,该如何处理?

在构建分布式系统时&#xff0c;开发人员经常会遇到消息积压的问题。当系统的处理能力不足时&#xff0c;消息会在队列中积压&#xff0c;导致系统 slowed down 或 even crashed。为了解决这个问题&#xff0c;我们需要采取一些措施来缓解消息积压。 文章目录 什么是消息积压&…

MyBatis篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、简述 Mybatis 的插件运行原理,以及如何编写一个插件。二、MyBatis实现一对一有几种方式?具体怎么操作的 ?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男…