Feign快速入门

news2024/11/17 5:21:57

文章目录

  • 一、Feign
    • 1.1 Feign介绍
    • 1.2 Feign的使用步骤
    • 1.3 Feign的自定义配置
      • 1.3.1 配置方法
    • 1.4 Feign的优化

一、Feign

1.1 Feign介绍

  Feign是一个Java HTTP客户端,它使开发人员可以轻松地与RESTful API进行交互。Feign使用注释来描述REST API,它还支持负载平衡和服务发现。Feign内置了Ribbon,它是一个负载平衡器,可以将请求发送到多个实例中的一个。
在这里插入图片描述

  使用Feign,您可以通过声明式的方式定义您的REST API客户端,而无需编写大量的样板代码。这使得开发人员可以更专注于业务逻辑,而不是编写和维护客户端代码,同时解决了使用RestTemplate调用http所存在的问题。

RestTemplate方法调用存在的问题:

  1. 代码可读性差,编程体验不统一;
  2. 参数复杂URL难以维护

1.2 Feign的使用步骤

  1. 添加Feign依赖项:

  需要将Feign添加到项目的依赖项中。例如,在Maven项目中将依赖项添加到pom.xml文件中:

<!-- feign客户端依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
  1. 添加注解:

在主启动类头部添加注解@EnableFeignClients:

@MapperScan("cn.caterpillar.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

  @EnableFeignClients是一个Spring Cloud的注解,用于启用Feign客户端的功能。当您在Spring Boot应用程序中使用Feign时,需要在一个@Configuration类上添加@EnableFeignClients注解,以启用Feign客户端。@EnableFeignClients的作用如下:

  1. 扫描Feign客户端接口:@EnableFeignClients注解会扫描指定包下的所有Feign客户端接口,并将其注册为Spring Bean。
  2. 启用Feign的负载均衡功能:当使用Feign进行HTTP请求时,Feign会与Ribbon集成,以便在多个实例之间进行负载均衡。@EnableFeignClients注解会启用Feign与Ribbon的集成,以便让您的应用程序使用负载均衡功能。
  3. 启用Feign的错误解码功能:当远程服务发生错误时,Feign会解码错误响应并将其转换为Java异常。@EnableFeignClients注解会启用此功能,以便让您的应用程序能够处理远程服务的错误响应。
  4. 配置Feign的相关参数:您可以使用@EnableFeignClients注解来配置Feign的相关参数,例如连接超时时间和读取超时时间等。通过在注解中设置参数,您可以自定义Feign客户端的行为,以适应您的应用程序需求。

  @EnableFeignClients注解的作用是启用Feign客户端的功能,并使其与Ribbon集成,以便使用负载均衡功能。同时还能配置Feign的相关参数,并使应用程序能够处理远程服务的错误响应。

  1. 创建Feign客户端接口:

以下是一个简单的Feign客户端接口:

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}
  1. 注入并使用Feign客户端所定义的操作:
@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private UserClient userClient;
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2. 利用Feign获取
        User user = userClient.findById(order.getUserId());
        // 3. 注入数据
        order.setUser(user);
        // 4.返回
        return order;
    }
}

1.3 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的重试

1.3.1 配置方法

Feign支持配置文件的方式配置,也支持java代码的方式配置

  1. 基于配置文件的方式
feign:  
  client:
    config: 
      userservice: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL #  日志级别 
  1. 基于java代码的方式

先声明一个类,然后声明一个Logger.Level的对象:

public class DefaultFeignConfiguration  {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; // 日志级别为BASIC
    }
}

全局生效,将其放到启动类的@EnableFeignClients这个注解中:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

局部生效,则把它放到对应的@FeignClient这个注解中:

@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class) 

日志的级别分为四种:

  • NONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

1.4 Feign的优化

  1. 日志级别尽量用basic
  2. 使用HttpClient或OKHttp代替URLConnection

  URLConnection不能够直接修改连接数,也不能对连接进行有效的管理和维护。

演示(HttpClient为例):

  • 添加依赖
<!--httpClient的依赖 -->
<dependency>
	<groupId>io.github.openfeign</groupId>
	<artifactId>feign-httpclient</artifactId>
</dependency>
  • 设置连接池参数
feign:
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数

使用Apache HttpClient或OkHttp的主要好处是:

  1. 支持HTTP/2:HTTP/2协议可以提供更高的性能和效率,但URLConnection只支持HTTP/1.1,因此使用HttpClient或OkHttp可以充分利用HTTP/2的优势。
  2. 更好的连接管理:HttpClient和OkHttp都提供了更好的连接管理,包括连接池和连接复用等功能,可以减少HTTP请求的响应时间和延迟。
  3. 更好的流式传输支持:HttpClient和OkHttp都提供了更好的流式传输支持,可以在发送大量数据时更有效地利用内存。
  4. 更好的性能和可扩展性:HttpClient和OkHttp都是高性能和可扩展的HTTP客户端库,可以为您的应用程序提供更好的性能和可扩展性。

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

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

相关文章

Springboot整合Junit5

1 SpringBoot整合Junit &#xff08;一&#xff09;junit5 介绍 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架&#xff0c;JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。 JUnit 5 JUnit Platfo…

音视频开发十九:SDL线程和事件

SDL事件相关API DL_Event 是SDL库中使用的一个数据结构&#xff0c;用于表示系统中发生的事件。一个事件可以是键盘按键、鼠标移动、游戏手柄移动、窗口事件等。SDL_Event 结构包含有关事件类型、事件发生时间和事件参数的详细信息。 SDL_Event 结构具有以下成员&#xff1a;…

[5 种有效方法] 适用于 Android 的通用解锁图案/密码

在当今世界&#xff0c;保护您的密码对于您的文件和数据的安全至关重要&#xff0c;尤其是在第三方应用程序盛行的情况下。为这些应用程序注册帐户不是问题&#xff0c;就像记住它们一样。但是&#xff0c;如果您不知何故忘记了手机密码&#xff0c;您仍然可以在不丢失宝贵数据…

突破规模化运维瓶颈 SREWorks云原生数智运维平台揭秘

作者&#xff1a; 钟炯恩——阿里云大数据基础工程技术团队运维专家 引言 突破规模化运维瓶颈是诸多IT规模增长的企业及组织当前遇到的比较棘手的问题。面对这些问题&#xff0c;多数人的第一反应是上云。但是上云之后我们会发现&#xff0c;即使云上的架构规模增大&#xf…

如何使用DNS实现融合CDN功能

将托管DNS解决方案与CDN配对可为您的网站提供额外的性能、可靠性和灵活性。 域名系统&#xff08;DNS&#xff09;是一种用于计算机、服务或连接到Internet或专用网络的任何资源的分层分布式命名系统&#xff0c;它将各种信息与分配给每个参与实体的域名相关联&#xff0c;它基…

ChatGPT 火了,一大批开源平替也来了

ChatGPT 凭一己之力让全球为 AI 沸腾&#xff0c;引发了科技巨头之间的聊天机器人军备竞赛。 众所周知&#xff0c;ChatGPT 的背后技术是 GPT(Generative Pre-trained Transformer)模型。GPT 是一种基于 Transformer 模型的自然语言处理模型&#xff0c;由 OpenAI 公司开发。它…

【elasticsearch部署】

安装elasticsearch 1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools 3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;1&#xff09;查看数据卷目录2&#xff09;解压缩分词器安…

前端必备的nginx知识点

nginx学习&#xff0c;看这一篇就够了&#xff1a;下载、安装。使用&#xff1a;正向代理、反向代理、负载均衡。常用命令和配置文件,很全_java冯坚持的博客-CSDN博客 前端必备的nginx知识点 - 掘金 前言&#xff1a; 最近在做一个后台项目 ngixn简介 nginx是一款轻量级&…

【Sql】sql语句练习随记

本文通过最经典的“学生-成绩-课程-教师”表来帮助练习sql语句。 STUDENT表 SNO 学号SNAME 姓名SSEX 性别SBIRTHDAY 生日CLASS 班级 SCORE表 SNO 学号CNO 课程编号DEGREE 分数 COURSE表 CNO 课程编号CNAME 课程名称TNO 教师编号 TEACHER表 TNO 教师编号TNAME 教师姓名TS…

(包教包会)最强分布式锁工具:Redisson

今天来聊聊分布式锁的最强实现&#xff1a;Redisson 从分布式锁到Redisson实现非常详细&#xff0c;适合慢慢咀嚼~ 一. Redisson概述 1.1 什么是Redisson&#xff1f; Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。…

CRMEB开源商城/标准版后台默认admin路径修改、后台目录地址修改

默认admin路径修改 v4.7 版本开始兼容可以修改admin路径&#xff0c;可以根据自己的要求更换后台访问地址&#xff1b; 默认路径不能携带特殊字符、全部都为小写字母 修改后台admin默认路径 标准版本文件位置根目录/config/app.php 开源版本文件位置根目录/crmeb/config/app.p…

新增套餐/redis/QuartZ

套餐其实就是检查组的集合&#xff0c;例如有一个套餐为“入职体检套餐”&#xff0c;这个体检套餐可以包括多个检查组&#xff1a;一般检查、血常规、尿常规、肝功三项等。所以在添加套餐时需要选择这个套餐包括的检查组。 套餐对应的实体类为Setmeal&#xff0c;对应的数据表…

深度学习(7)之图像抠图 Image Matting算法调研

目录 1.Trimap和Strokes 2. 相关数据集 3.论文算法调研 3.1 Deep Image Matting 3.2 Semantic Image Matting 3.3 Background Matting 3.4 Background Matting V2 3.5 Semantic Human Matting 3.6 HAttMatting 3.7 MMNet&#xff1a;Towards Real-Time Automatic Portrait Matt…

Nginx虚拟主机、优化和防盗链

一、Nginx虚拟主机 1、基于域名的nginx虚拟主机的操作步骤 1.1 为虚拟主机提供域名和IP的映射(也可以使用DNS正向解析) echo "192.168.2.66 www.xkq.com www.wy.com" >> /etc/hosts1.2 为虚拟主机准备网页文档 mkdir -p /var/www/html/ly/ mkdir -p /var/w…

经典文献阅读之--VGICP(体素化的ICP匹配)

0. 简介 之前我们在以前的文章中介绍了很多有关于点云匹配相关的知识&#xff0c;最近两年处理GICP这一大一统的ICP匹配方法以外&#xff0c;还有一个工作对体素化和ICP这两者打起了心思&#xff0c;《Voxelized GICP for Fast and Accurate 3D Point Cloud Registration》提出…

动车的颜色种类

01 大家平时见到最多的动车 可能就是白色的吧 和谐号动车组开行后 白就是动车的经典配色 白色为底 车腰一条蓝色飘带让其设计感十足 我们也可以把这种动车配色 称为和谐白 02 复兴号CR400AF型电力动车组 最高运营速度350公里每小时 因其车身采用银色底色 搭配侧窗…

大数据时代必备技能,从0开始学好数据可视化

当今社会&#xff0c;数据可视化已经成为了一项非常重要的技能。随着大数据时代的到来&#xff0c;越来越多的人开始关注数据可视化&#xff0c;并希望能够快速地掌握这项技能。那么&#xff0c;如何快速学习数据可视化呢&#xff1f;以下是AdBright数据分析师的一些建议。 什么…

CDN的发展史和未来

互联网是一种不断变化的机制&#xff0c;新形式的数据和内容正在不断创造。在它商业化后不久&#xff0c;必须解决尽快将大量数据推送给最终用户的问题&#xff0c;CDN因此应运而生。 CDN的根源产生于近20年前&#xff0c;并一直是内容交付的驱动力&#xff0c;自其创立以来&a…

企业电子招投标系统源码之了解电子招标投标全流程

随着各级政府部门的大力推进&#xff0c;以及国内互联网的建设&#xff0c;电子招投标已经逐渐成为国内主流的招标投标方式&#xff0c;但是依然有很多人对电子招投标的流程不够了解&#xff0c;在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同&#xff0…

虚拟机里安装ubuntu-23.04-beta-desktop-amd64,开启SSH(换源、备份),配置中文以及中文输入法等

一、下载 官网 清华镜像站(推荐) 二、配置虚拟机 【自定义】 点击“下一步”&#xff0c;此处【默认】&#xff0c;再点击“下一步”。 点击“稍后安装操作系统”&#xff0c;再点击“下一步”。 点击“Linux(L)”&#xff0c;版本选择【Ubuntu 64 位】&#xff0c;再点击…