【Spring Cloud】Feign整合服务容错中间件Sentinel

ops/2024/10/10 15:53:10/

文章目录

  • 引入sentinel依赖
  • 配置文件
  • 为被容错的接口指定容错类
  • 创建容错类
  • 修改controller
  • 演示
  • 扩展
    • 为被容错的接口更改容错类
    • 创建回退工厂类
    • 演示
  • 总结

上一篇文章中我们已经对服务容错中间件 Sentinel 持久化的两种模式进行了全面解析,本文我们将对Feign和Sentinel进行有机整合。

sentinel_4">引入sentinel依赖

<!--sentinel客户端-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置文件

在配置文件中开启 Feign 对 Sentinel 的支持

feign:sentinel:enabled: true

为被容错的接口指定容错类

/*** value用于指定调用nacos下哪个微服务* fallback用于指定容错类*/
@FeignClient(value="shop-product",fallback = ProductServiceFallback.class)
public interface ProductService {//指定调用提供者的哪个方法@GetMapping(value = "/product/{pid}")ShopProduct findByPid(@PathVariable("pid") Long pid);
}

创建容错类

容错类要求必须实现被容错的接口,并为每个方法实现容错方案

@Component
public class ProductServiceFallback implements ProductService {@Overridepublic ShopProduct findByPid(Long pid) {ShopProduct product = new ShopProduct();product.setId(-1L);return product;}
}

修改controller

在这里插入图片描述

演示

停止shop-product服务,启动shop-order服务,访问下单请求,观察容错效果

在这里插入图片描述

扩展

如果想在容错类中拿到具体的错误,可以使用下面的方式

为被容错的接口更改容错类

更改被容错接口的容错返回类为回退工厂类

@FeignClient(value="shop-product", fallbackFactory = ProductServiceFallBackFactory.class)
public interface ProductService {//指定调用提供者的哪个方法@GetMapping(value = "/product/{pid}")ShopProduct findByPid(@PathVariable("pid") Long pid);
}

创建回退工厂类

@Component
public class ProductServiceFallBackFactory implements FallbackFactory<ProductService> {@Overridepublic ProductService create(Throwable throwable) {return new ProductService(){@Overridepublic ShopProduct findByPid(Long pid) {throwable.printStackTrace();ShopProduct product=new ShopProduct();product.setId(-1L);return product;}};}
}

演示

在这里插入图片描述

注意:Fallback和FallbackFactory只能使用其中一种方式。

总结

到这儿,Feign整合服务容错中间件Sentinel就已经介绍完了。下一篇将为大家带来Gateway——服务网关的相关文章,敬请期待吧!

后续的文章,我们将继续完善我们的微服务系统,集成更多的Alibaba组件。想要了解更多JAVA后端知识,请点击文末名片与我交流吧。留下您的一键三连,让我们在这个寒冷的东西互相温暖吧!


http://www.ppmy.cn/ops/43934.html

相关文章

知识融合概述

文章目录 知识融合知识融合过程研究现状技术发展趋势 知识融合 知识融合的概念最早出现在1983年发表的文献中&#xff0c;并在20世纪九十年代得到研究者的广泛关注。而另一种知识融合的定义是指对来自多源的不同概念、上下文和不同表达等信息进行融合的过程认为知识融合的目标是…

Unity环绕物体的摄像机,添加了遮挡的适应

第三人人称摄像机 支持的功能 设定目标后使用鼠标可以环绕目标点旋转&#xff0c;且会进行遮挡的适配&#xff0c;当有遮挡的时候会移动差值移动到没有遮挡的位置。 使用方式 将vThirdPersonCamera 挂在与摄像机上然后为target赋值。 如果有需要检测遮挡的层级可以修改&…

结构型模式之桥接模式

文章目录 概述原理结构图代码示例 小结 概述 桥接模式(bridge pattern) 的定义是&#xff1a;将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。 桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转…

pinia的使用

搭建pinia环境 pinia&#xff1a;集中式状态管理工具&#xff0c;用于各组件之间共享数据&#xff08;多个组件会用到的数据才考虑放到pinia中&#xff09; 在vue2中使用的是vuex 1.终端输入&#xff1a;npm i pinia 2. 在vue组件中出现pinia 用pinia存储读取数据 要想好…

Yolov5保姆及入门-含源码【推荐】

前言 YOLO系列模型作为一种实时目标检测算法&#xff0c;自从YOLO1发布以来&#xff0c;就以其检测速度快、准确率高而受到广泛关注。随着技术的迭代&#xff0c;YOLO系列已经发展到了YOLO8。本文将详细介绍YOLO5的技术规格、应用场景、特点以及性能对比。 yolov5源码下载地址…

Python图形界面(GUI)Tkinter笔记(八):用【Label()】方法制作九九乘数表

主要是使用"config()"方法来体现函数式、模块化的美好风景。把需随时要修改的控件参数定义在“config()”方法里且把它封装在一个函数中&#xff0c;这时只需对这函数内的“config()”方法作出相应的修改即可&#xff0c;无需对主代码或全部代码重新修一遍。这也是Py…

python-docx 在word中指定位置插入图片或表格

docx库add_picture()方法不支持对图片位置的设置 1、新建一个1行3列的表格&#xff0c;在中间的一列中插入图片 from docx import Document from docx.shared import Pt from docx.oxml.shared import OxmlElement from docx.enum.text import WD_ALIGN_PARAGRAPHdef add_cen…

LeetCode 题解:112. 路径总和,递归,JavaScript,详细注释

原题链接&#xff1a; 112. 路径总和 解题思路&#xff1a; 如果求根节点到叶子节点的路径上的节点值之和&#xff0c;假设共有3个节点&#xff0c;那么写成计算式是val1 val2 val3 sum那么将计算式转换就可以得到val3 sum - val1 - val2也就是说&#xff0c;问题可以从…