Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】

这篇具有很好参考价值的文章主要介绍了Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳转
Java之SpringCloud Alibaba【二】【微服务调用组件Feign】 跳转
Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】 跳转
Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】 跳转
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】 跳转
Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】 跳转
Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】 跳转
Java之SpringCloud Alibaba【八】【Spring Cloud微服务Gateway整合sentinel限流】 跳转
Java之SpringCloud Alibaba【九】【Spring Cloud微服务Skywalking】 跳转

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

一、Sentinel整合openfeign

1、复制一下order-openfeign项目(创建order-openfeign-sentinel)

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
然后在stock-nacos当中编写对应的接口
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

    @RequestMapping("/reduct2")
    public String reduct2(){
        int a = 1/0;

        System.out.println("扣减库存");
        return "扣减库存:"+port;
    }

在order-openfeign-sentinel当中编写对应的调用微服务的业务逻辑
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

@FeignClient(name = "stock-service",path = "/stock",configuration = FeignConfig.class)
public interface StockFeignService {
    @RequestMapping("/reduct2")
    public String reduct2();

}

编写对应的接口调用微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private StockFeignService stockFeignService;

    @RequestMapping("/add")
    public String add(){
        return stockFeignService.reduct2();
    }
}

完善一下配置文件
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
运行项目
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
访问:http://localhost:8041/order/add

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

2、Sentinel整合openfeign

引入Sentinel依赖

        <!--Sentinel依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

@Component
public class StockFeignServiceFallback implements StockFeignService{
    @Override
    public String reduct2() {
        return "降级啦!!";
    }
}

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务


/*
*
* 2、添加feign接口和方法
* name 指定调用rest接口所对应的服务名
* path 指定调用的rest接口所在的StockController指定的@RequestMapping
* */
@FeignClient(name = "stock-service",path = "/stock",fallback = StockFeignServiceFallback.class)
public interface StockFeignService {
    @RequestMapping("/reduct2")
    public String reduct2();

}

配置yml
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

feign:
  sentinel:
    # openfeign 整合sentinel
    enabled: true

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
访问:http://localhost:8041/order/add
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

二、热点参数限流【热点识别流控】

何为热点?热点即经常访问的数据。

很多时候我们希望统计某个热点数据中访问频次最高的数据,并对其访问进行限制。

比如:
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
可以在方法上对指定传入的参数做限流

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。
热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

注意:
1.热点规则需要使用@SentinelResource("resourceName")注解,否则不生效
2.参数必须是7种基本数据类型才会生效
测试用例
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

    @RequestMapping("/get/{id}")
    @SentinelResource(value = "getById",blockHandler = "HotBlockHandler")
    public String getById(@PathVariable("id")  Integer id){
        System.out.println("正常访问");
        return "正常访问";
    }
    public String HotBlockHandler(@PathVariable("id")  Integer id, BlockException e){
        return "热点异常处理";
    }
}

对上述id参数进行流控
访问:http://localhost:8041/order/get/1
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
不断访问:http://localhost:8041/order/get/1
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
我们访问id为2 的
不断访问:http://localhost:8041/order/get/2
无论怎样访问依旧是正常
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

三、Sentinel控制台规则配置详解

1、系统规则

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Sentinel系统自适应限流从整体维度对应用入口流量进行控制,结合应用的Load、CPU使用率、总体平均RT、入口QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入
口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

  • Load自适应(仅对Linux/Unis-like机器生效)∶系统的load1作为启发指标,进行自适应系统保护。当系统load1超过设定的启发值,且系统当前的并发线程数超过估
    算的系统容量时才会触发系统保护(BBR阶段)。系统容量由系统的maxOps * minRt估算得出。设定参考值一般是CPU cores * 2.5
    https://www.cnblogs.com/gentlemanhai/p/8484839.html

2、CPU usage (1.5.0+版本)︰当系统CPU使用率超过阈值即触发系统保护(取值范围0.0-1.0),比较灵敏。

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
不断访问
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

3、平均RT:当单台机器上所有入口流量的平均RT达到阈值即触发系统保护,单位是毫秒。

4、并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护

2.0x

5、入口QPS:当单台机器上所有入口流量的QPS达到阈值即触发系统保护。

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
访问:http://localhost:8041/order/get/1
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
不断访问
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

四、Sentinel持久化

1、Sentinel持久化模式

Sentinel规则的推送有下面三种模式:
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

1.1 原始模式

如果不做任何修改,Dashboard的推送规则方式是通过API将规则推送至客户端并直接更新到内存中:
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
这种做法的好处是简单,无依赖;坏处是应用重启规则就会消失,仅用于简单测试,不能用于生产环境。

1.2 拉模式

pll模式的数据源(如本地文件、RDBMS等)一般是可写入的。使用时需要在客户端注册数据源:将对应的读数据源注册至对应的 RuleManager,将写数据源注册至tansport的WritableDataSourceRegistry 中。

1.3 推模式

生产环境下一般更常用的是push模式的数据源。

对于push模式的数据源,如远程配置中心(Zookeeper Nocos,Apole等等),推送的操作不应由Sentinel客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。

因此推送规则正确做法应该是配置中心控制台/Sentiel控制台→配置中心→ Sentinel数据源→Sentinel

而不是经Sentinel数据源推送至配置中心。这样的流程就非常清晰了︰

1.3.1 基于Nacos配置中心控制台实现推送
<dependency>
	<groupId>com.alibaba.csp</groupId>
	<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

nacos配置中心中配置流控规则

1.3.2 配置nacos

http://192.168.180.128:8849/nacos/#/configurationManagement?dataId=&group=&appName=&namespace=&pageSize=&pageNo=

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

[
    {
        "resource": "/order/flow",
        "controlBehavior": 0,
        "count": 10.0,
        "grade": 1,
        "limitApp": "default",
        "startegy": 0
    }
]

Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--sentinel启动器-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
    </dependencies>

设置对应的配置文件
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

server:
  port: 8861
spring:
  application:
    name: order-sentinel
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8858
      web-context-unify: false #默认将调用链路收敛
      datasource:
        flow-rule:
          nacos:
            server-addr: 192.168.180.128:8849
            username: nacos
            password: nacos
            dataId: order-sentinel-flow-rule
            rule-type: flow

访问:http://127.0.0.1:8861/order/flow
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务
不断连续点击访问
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务

我们可以看到
http://127.0.0.1:8858/#/dashboard/flow/order-sentinel

sentinel被持久化了
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】,Java[精选]一篇精通系列【头脑风暴】,Java,SpringCloud,java,spring cloud,微服务文章来源地址https://www.toymoban.com/news/detail-680886.html

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳转
Java之SpringCloud Alibaba【二】【微服务调用组件Feign】 跳转
Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】 跳转
Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】 跳转
Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】 跳转
Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】 跳转
Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】 跳转
Java之SpringCloud Alibaba【八】【Spring Cloud微服务Gateway整合sentinel限流】 跳转
Java之SpringCloud Alibaba【九】【Spring Cloud微服务Skywalking】 跳转

到了这里,关于Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud Alibaba Sentinel整合GateWay

    在微服务系统中,网关提供了微服务系统的统一入口,所以我们在做限流的时候,肯定是要在网关层面做一个流量的控制,Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 网关: Sentinel 1.6.0 引入了 Sentinel API Gateway Adapter Common 模块,此模块中包含网关限流的

    2024年02月16日
    浏览(46)
  • 【springcloud微服务】springcloud整合openfeign使用详解

    目录 一、前言 二、微服务接口之间的调用问题 2.1 Httpclient 2.2 Okhttp 2.3 HttpURLConnection 2.

    2024年02月02日
    浏览(35)
  • SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)

    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 1、sentinel的特征 丰富的应用场景 : Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突

    2024年02月16日
    浏览(41)
  • 【springcloud 微服务】Spring Cloud Alibaba Sentinel使用详解

    目录 一、前言 二、分布式系统遇到的问题 2.1 服务可用性问题 2.1.1  单点故障

    2024年01月16日
    浏览(50)
  • 【SpringCloud Alibaba】(六)使用 Sentinel 实现服务限流与容错

    今天,我们就使用 Sentinel 实现接口的限流,并使用 Feign 整合 Sentinel 实现服务容错的功能,让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开,所以,这里我们使用的服务容错组件是阿里开源的 Sentinel。 当然,能够实现服务容错

    2024年02月14日
    浏览(47)
  • SpringCloud Alibaba - Sentinel 微服务保护解决雪崩问题、Hystrix 区别、安装及使用

    目录 一、Sentinel 1.1、背景:雪崩问题 1.2、雪崩问题的解决办法 1.2.1、超时处理 缺陷:为什么这里只是 “缓解” 雪崩问题,而不是百分之百解决了雪问题呢? 1.2.2、舱壁模式 缺陷:资源浪费 1.2.3、熔断降级 1.2.4、流量控制 误区:那是不是只用流量控制就可以,前面三种方法

    2024年02月07日
    浏览(34)
  • 深入学习SpringCloud Alibaba微服务架构,揭秘Nacos、Sentinel、Seata等核心技术,助力构建高效系统!

    链接: https://pan.baidu.com/s/1hRN0R8VFcwjyCTWCEsz-8Q?pwd=j6ej 提取码: j6ej 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v4的分享 📚【第01阶段】课程简介:全面介绍课程内容,为你提供学习引导和目标规划,让你快速进入学习状态!💡 🔍【第02阶段】基

    2024年02月12日
    浏览(54)
  • SpringCloud之Gateway整合Sentinel服务降级和限流

    1.下载Sentinel.jar可以图形界面配置限流和降级规则 地址:可能需要翻墙 下载jar文件 2.引入maven依赖 3.写个自动注入Resource的过滤器类(可以不写注解直接使用) 4.写配置文件 application.properties 5.cmd命令行启动jar文件访问localhost:18080页面,自己设置QPS java -jar -server.port=18080 sentinel-dash

    2024年02月07日
    浏览(45)
  • SpringCloud微服务之间如何进行用户信息传递(涉及:Gateway、OpenFeign组件)

    在业务微服务中通过工具类获取当前用户信息 网关微服务(Gateway)往业务微服务传递用户信息 业务微服务之间通过OpenFeign传递用户信息 只要把上面两处打通,然后业务微服务在通过拦截器获取到用户信息,之后再将用户信息存在ThreadLocal中,这样我们就可以实现在业务微服

    2024年02月13日
    浏览(54)
  • 【分布式微服务专题】从单体到分布式(四、SpringCloud整合Sentinel)

    相对来说,Sentinel的学习难度比之之前的Dubbo要低了不少。不过在学习过程中也遇到了一些认知局限带来的困难。比如,虽然还是学习了Sentinel,但是不知道生产环境该如何配置才是最佳的状态。 说到底,Sentinel还是没有提供很好的文档支持。比如:生产最佳实践方案。 官方也

    2024年01月23日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包