Spring Cloud Sentinel配置

Spring Cloud Sentinel

文章目录

      • [Spring Cloud Sentinel](#Spring Cloud Sentinel)
        • [1. Sentinel Dashboard 启动](#1. Sentinel Dashboard 启动)
        • [2. Spring Cloud 客户端配置](#2. Spring Cloud 客户端配置)
        • [3. Sentinel Dashboard 限流配置](#3. Sentinel Dashboard 限流配置)
        • [4. Sentinel Dashboard 熔断配置](#4. Sentinel Dashboard 熔断配置)
1. Sentinel Dashboard 启动
  1. 下载sentinel dashboard jar
  2. sentinel dashboard启动在8889端口上
    java -jar -Dserver.port=8889 sentinel-dashboard-1.8.8.jar
  3. 打开dashboard页面
    http://localhost:8889
2. Spring Cloud 客户端配置
  1. 引入sentinel客户端
xml 复制代码
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
  1. application.yaml文件添加sentinel客户端配置
yaml 复制代码
spring:
  application:
    name: stock-service
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8889 # dashboard服务所在的地址跟ip
        client-ip: 192.168.0.5 # 这里是程序所在的客户端ip,使用ipconfig命令查看,不配置无法再dashboard上显示当前服务
  1. 打开dashboard页面可看到微服务,可能会稍微有点延迟才能看到,此时簇点链路不会有服务的接口信息,需要我们调用接口,才会在上面显示
  2. 调用order-service的/order/add接口后可以看到比上图增加了一个/order/add接口.
3. Sentinel Dashboard 限流配置

限流方式有三种,直连,关联跟链路

直连

限制并发过高 问题,防止当前程序崩溃,限制当前接口的qps,设置为5,可以在流控规则中看到

发起压测,并发10个,只能通过5个,不限流的话10个请求时都可以通过的

关联

关联用于两个接口间的资源竞争

这里有两个接口/order/{productId}跟/order/add接口,一个接口是订单查询,一个接口是订单新增后,因为两者都要去操作数据库的订单表,所以可能存在数据库资源抢占 问题,一般认为订单的新增接口优先级比订单查询接口高,所以当/order/add的QPS达到某个阈值时,对优先级低的/order/{productId}接口进行限流,这里设置当/order/add的QPS达到5时(只是一个监控,不会限制add接口的QPS),/order/{productId}接口进行限流

同时发起/order/add接口跟/order/{productId}接口的压测,add接口都成功,QPS是8,不会被上图设置的QPS=5限制住,/order/{productId}则是因为add接口的QPS达到8,直接限制了接口,拒绝请求

/order/add并发:

/order/{productId}并发:

链路

链路主要是资源分配,对同一个资源有多个入口的情况下,限制该资源的访问

  1. Service类通过@SentinelResource定义一个方法为资源,/order/add接口跟/order/{productId}接口都会调用到这个服务,add是新增后查询,/order/{productId}是直接查询
java 复制代码
    @Override
    @SentinelResource(value = "order")
    public TProduct getProduct(String productId) {
        return productMapper.selectById(productId);
    }
  1. 客户端的spring.cloud.sentinel.web-context-unify的默认值是true ,资源是聚合的,这里的入口资源 是sentinel_web_servlet_context,顶层的入口,统一对资源进行限流,两个接口共享资源的QPS,同一时间两个接口并发的总QPS为5

    同时发起/order/add接口跟/order/{productId}并发请求10s,可以看到 两个接口的成功数(5+46)/并发时间10s = 5QPS

    /order/add并发:

    /order/{productId}并发:

  2. spring.cloud.sentinel.web-context-unify设置为false,则入口资源可以分别单独设置为/order/add接口跟/order/{productId},将对不同接口进行限流

yaml 复制代码
spring:
  application:
    name: order-service
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8889
        client-ip: 192.168.0.5
      web-context-unify: false

QPS大概是5

4. Sentinel Dashboard 熔断配置

待续...

相关推荐
Miketutu7 小时前
Spring MVC消息转换器
java·spring
小小虫码9 小时前
项目中用的网关Gateway及SpringCloud
spring·spring cloud·gateway
带刺的坐椅14 小时前
无耳科技 Solon v3.0.7 发布(2025农历新年版)
java·spring·mvc·solon·aop
精通HelloWorld!17 小时前
使用HttpClient和HttpRequest发送HTTP请求
java·spring boot·网络协议·spring·http
LUCIAZZZ18 小时前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
拾忆,想起18 小时前
如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景
spring boot·后端·spring·spring cloud·微服务
鱼骨不是鱼翅19 小时前
Spring Web MVC基础第一篇
前端·spring·mvc
hong_zc21 小时前
Spring MVC (三) —— 实战演练
java·spring·mvc
Future_yzx1 天前
Spring AOP 入门教程:基础概念与实现
java·开发语言·spring
安清h1 天前
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册
数据库·后端·mysql·spring·mybatis