Feign的使用

目录

一.概念

二.使用

2.1依赖

2.2启动类注释

2.3.创建service包,写接口

2.4.生产者方法

2.5效果

三.openfeign的服务降级

3.1理论

3.2使用

一.概念

Feign是Spring Cloud提供的声明式、模板化的HTTP生产者,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。

 Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring MVC注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。Spring Cloud 常见的集成方式是使用Feign+Ribbon技术来完成服务间远程调用及负载均衡的。

前端传值

58b704e1571b4c68891a393b66e10686.png

后端传值

bc041ad7aeda4a49931e8632d5068923.png

二.使用

2.1依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

2.2启动类注释

@EnableFeignClients//启动feign
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaCustomerApplication {...
}

2.3.创建service包,写接口

@FeignClient的属性name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。

@Service
@FeignClient(name = "PROVIDER")//name=生产者远程服务的名字
public interface UserService {@RequestMapping("/getuser/{name}")public User getuser(@PathVariable("name") String name);
}

24827341230347319ac881811e6e5633.png

9242e23e78fb4294b9ead720dc29dd62.png

2.4.生产者方法

通过消费者中的service接口找到生产者中对应路径的方法

 @RequestMapping("/getuser/{name}")public User getuser(@PathVariable("name") String name){User user = new User();user.setUsername(name);return user;}

2.5效果

1d21c6eaf8414a00bccde37da06c967a.png

三.openfeign的服务降级

3.1理论

在使用OpenFeign进行微服务间的调用时,熔断和降级是常用的服务保护机制,用于提高系统的可靠性和稳定性。

熔断(Circuit Breaker)

熔断机制在微服务架构中用于防止错误的传播和快速失败恢复。当远程服务不可用或响应时间过长时,熔断器会打开并临时停止向该服务的请求,避免资源浪费和系统雪崩。OpenFeign集成了Hystrix或者Resilience4j等熔断器,通过配置熔断策略可以实现对服务调用的熔断保护。
降级(Fallback)

降级机制是指当远程服务出现问题时,提供一个备用方案来保证系统的可用性。在OpenFeign中,可以通过定义降级逻辑或者提供默认返回值来实现服务降级。一旦远程服务调用失败或超时,系统将使用预先定义的降级逻辑或者默认返回值来代替原本的结果,确保系统能够正常运行。在消费者和生产者调用时,一旦生产者发生错误、异常或超时,自动执行一段业务逻辑。

3.2使用

1.添加依赖

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId></dependency>

2.配置文件

spring:cloud:openfeign:circuitbreaker:enabled: true

3.专门做服务降级的类

继承FallbackFactory接口,实现所有接口方法,专门处理接口出错后的返回值

@Component
public class MyFeignClientFallbackFactory implements FallbackFactory<UserService> {@Overridepublic UserService create(Throwable cause) {return new UserService() {@Overridepublic String loginProvider(User user) {System.out.println("请重新登录");return "请重新登录";}@Overridepublic String getuser(String name) {System.out.println("请稍作等待");return "请稍作等待";}};}
}

4.在service中加入fallbackFactory

@FeignClient属性fallbackFactory:工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码。

fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。

@Service
@FeignClient(name = "PROVIDER",fallbackFactory= MyFeignClientFallbackFactory.class)//name=生产者远程服务的名字,fallbackFactory一旦出现错误进入这个类中
public interface UserService {@RequestMapping("/loginProvider")public String loginProvider(User user);@RequestMapping("/getuser/{name}")public String getuser(@PathVariable("name") String name);
}

效果

关闭所有生产者,访问接口。

306cade22a354e8e838c1eae71bd0e81.png

490c64a6159740fea92cb95ebf6639b9.png

 

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

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

相关文章

创建SpringBoot控制台程序并打包运行(Windows)

1. 新建一个Springboot项目Study (PS&#xff1a; 这个不需要演示了吧?) 注意pom.xml&#xff0c;是spring-boot-starter&#xff0c;不是spring-boot-web-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

蓝桥杯备赛(C/C++组)

README&#xff1a; 本笔记是自己的备考笔记&#xff0c;按照官网提纲进行复习&#xff01;适合有基础&#xff0c;复习用。 一、总考点 试题考查选手解决实际问题的能力&#xff0c;对于结果填空题&#xff0c;选手可以使用手算、软件、编程等方法解决&#xff0c;对于编程大…

BTP连接cloud connector中配置的SAP

登录地址 登录之后可以看到我们已经配置成功的后端系统SAP。 从cloud connector中获取location ID ,然后在BTP中配置Destination 选择目标标签页&#xff0c;点击‘新建目标’&#xff0c;如下图&#xff1a; 新建连接 暂时不知道错误原因 创建目标-HTTP  新建目标&…

软考134-上午题-【软件工程】-进度管理

一、甘特图&#xff08;了解&#xff09; 1-1、定义 Gantt图是一种简单的水平条形图&#xff0c;它以日历为基准描述项目任务。 水平轴表示日历时间线(如时、天、周、月和年等)&#xff0c;每个条形表示一个任务&#xff0c;任务名称垂直地列在左边的列中&#xff0c;图中水…

DIY mybatisPlus的分页插件

目录 起因修改定义接口重写MyPage的方法 实践测试 起因 在我们通过list返回的列表页&#xff0c;出现了一个需要数据合计的需求&#xff0c;例如一个订单1块钱&#xff0c;那么所有订单加起来多少钱&#xff0c;那么list一般都通过分页返回&#xff0c;而统计所有订单又不能只…

量化研究---小果因子分析系统使用教程,可转债macd因子为例子

文章链接 量化研究---小果因子分析系统使用教程&#xff0c;可转债macd因子为例子 (qq.com) 因子分析是一种多维变量统计分析方法&#xff0c;用于从多个变量中提取少数公共因子。 具体来说&#xff0c;因子分析的核心目的是通过研究变量之间的相关性&#xff0c;将多个相关联…

Spring 事务 (编程式 声明式, Spring 事务传播机制)

事务 事务是一组操作的集合, 是一个不可分割的整体 事务会把所有的操作作为一个整体, 一起向数据库提交或是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败 Spring 中事务的实现 编程式 (手动写代码操作事务)声明式 (通过注解自动开启和提交事务) 编程式事务 开启事务 …

Module外贸主题开心版下载-v5.7.0版本WordPress企业模板

主题下载地址&#xff1a;Module外贸主题开心版下载-v5.7.0版本 Module主题介绍&#xff1a;采用全新模块化开发&#xff0c;首页模块可视化拖拽自由组合&#xff0c;可自定义搭建出不同行业适用的企业网站。同时主题全面支持WPML多语言切换&#xff0c;可轻松搭建外贸网站。W…

torchEEG工具箱

文章信息: 题目&#xff1a;TorchEEGEMO&#xff1a;基于脑电图的情绪识别深度学习工具箱 期刊&#xff1a;Expert Systems with Applications 环境&#xff1a;pytorch 1.11.0 CUDA 11.3 摘要&#xff1a; ​ 一个python工具箱TorchEEG&#xff0c;将工作流程分为五个模块…

学习STM32第十六天

RTC实时时钟 一、简介 RTC是一个独立的BCD格式定时器&#xff0c;提供一个时钟日历&#xff0c;两个可编程报警中断&#xff0c;一个具有中断功能周期性可编程唤醒标志&#xff0c;RTC和时钟配置系统处于后备区域。 通过两个32位寄存器以BCD格式实现秒、分钟、小时&#xff08…

OKCC搭建配置什么样的服务器合适

OKCC呼叫中心系统是一种采用软硬件结合的架构方式、及分布式的IP技术&#xff0c;从多角度为企业提供整合的一体化解决方案。因此&#xff0c;搭建OKCC呼叫中心系统所使用的服务器应该满足以下几点要求&#xff1a; 稳定性&#xff1a;服务器需要具有较高的稳定性和可靠性&…

STM32之不使用MicroLIB

一、microlib介绍 microlib 是缺省 C 库的备选库,功能上不具备某些 ISO C 特性。 microlib 进行了高度优化以使代码变得很小,功能比缺省 C 库少,用于必须在极少量内存环境下运行的深层嵌入式应用程序。 二、不使用microlib的原因 由于microlib不支持C++开发,因此在使用C…

element plus el-date-picker type=“datetime“ 限制年月日 时分秒选择

如何限制el-date-picker组件的时分秒选中&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文档 文档在这里&#xff1a;DateTimePicker 日期时间选择器 | Element Plus 它提供的disabled-date给我们来限制日期选择 nice&#xff01;&…

2024年3月洗衣机大家电线上电商(京东天猫淘宝)销量排行榜

鲸参谋监测的线上电商&#xff08;京东天猫淘宝&#xff09;平台3月份的洗衣机大家电销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年3月份&#xff0c;线上电商平台洗衣机的销量累计约224万件&#xff0c;环比增长了29%&#xff0c;环比增长了约29%&#xff…

网络变压器在网络分析仪上能通过测试,装上设备后网速达不到呢?

Hqst华轩盛(石门盈盛)电子导读&#xff1a;今天和大家一起探讨网络变压器在网络分析仪上能通过测试&#xff0c;装上设备后网通设备网速达不到的可能原因及其处理方式 一、出现这种情况可能有以下原因&#xff1a; 1.1. 设备兼容性问题&#xff1a;设备其它元器件与 网络…

MATLAB绘制复杂分段函数图像

MATLAB绘制复杂分段函数图像 clc;close all;clear all;warning off;%清除变量 rand(seed, 200); randn(seed, 200) % 定义 x 范围和分辨率 x linspace(-2, 2, 1000); % 初始化 y 数组 y zeros(size(x)); % 分段定义函数 y(x < 0) x(x < 0).^2; y(x > 0 …

使用Termux在Android设备上编译运行SpecCPU2006

Spec CPU 2006 的使用说明&#xff08;曲线救国版&#xff09; 因本部分实验用到的Spec CPU2006依赖于多个编译工具包&#xff0c;因此对源码的编译要在配置好环境的Linux设备上运行&#xff0c;根据实验发现&#xff0c;现有的环境&#xff08;包括adb和termux&#xff09;都不…

FreeRTOS之动态创建任务与删除任务

1.本文是利用FreeRTOS来动态创建任务和删除任务。主要是使用FreeRTOS的两个API函数&#xff1a;xTaskCreate()和vTaskDelete()。 任务1和任务2是让LED0、LED1闪烁。任务3是当按键按下时删除任务1。 使用动态创建任务时&#xff0c;需要动态的堆中申请任务所需的内存空间&…

Flask实战

from flask import Flask appFlask(__name__)点击Flask同时点击键盘ctrl即可查看Flask的默认初始化函数 def __init__(self,import_name: str,static_url_path: str | None None,static_folder: str | os.PathLike[str] | None "static",static_host: str | None …

安装docker的PHP环境NLMP环境在国产deepin操作系统上

1: 先安装docker 安装完后执行,权限设置 sudo usermod -aG docker $USER或者sudo usermod -aG docker kentrl#添加当前用户到Docker用户组中 sudo newgrp docker#更新用户组数据,必须执行否则无效 sudo systemctl restart docker 先看目录结构: 2:按照目录结构挂载磁盘,…