目录

(一)Nacos动态配置
(二)Nacos注册中心
(三)Sentinel之限流
(四)Sentinel之熔断
(五)Gateway之路由、限流
(六)Gateway之鉴权、日志
(七)Gateway搭配Nacos实现动态路由
(八)Dubbo + Nacos

正文

考虑充值是一项重要的功能,通常不希望因为查询余额接口调用过于频繁而导致充值功能不可用,现在引入Sentinel对payment-service服务的/balance接口做限流保护。

在上一节payment-service代码上增加依赖:

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>${alibaba.version}</version></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.6.0</version></dependency>

在bootstrap.yml中增加Sentinel的数据源设置:

spring:application:name: payment-servicecloud:nacos:config:server-addr: 127.0.0.1:8848discovery:server-addr: 127.0.0.1:8848sentinel:datasource:ds1:nacos:server-addr: 127.0.0.1:8848dataId: ${spring.application.name}-flow-rulesdata-type: jsonrule-type: flow

其中,数据源名称ds1任意设置即可。这里使用Nacos作为数据源,所以名称的下一级属性设置为nacos。

接下来按dataId在Nacos中创建配置

dataId:payment-service-flow-rules
格式:JSON
内容:

[{"resource": "protected-resource","controlBehavior": 2,"count": 1,"grade": 1,"limitApp": "default","strategy": 0}
]

截图示例:

修改PaymentController

在getBalance方法上增加注解:

@SentinelResource(value = "protected-resource", blockHandler = "handleBlock")

添加一个handleBlock方法,要求参数与getBalance保持一致,并且在最后增加一个BlockException参数

    public Balance handleBlock(Integer id, BlockException e) {return new Balance(0, 0, 0, "限流");}

在限流设置中,grade=1表示基于QPS/并发数做流量控制,count=1表示阈值为1,即QPS超过1触发。controlBehavior=0表示处理策略是直接拒绝。

重启payment-service,在浏览器中打开http://localhost:8082/pay/balance?id=1并迅速刷新,可以看到一部分的请求返回数据为handleBlock方法的返回值。

在Nacos中把count值改为1000,继续快速刷新浏览器,可以观察到不会再触发限流。

限流设置的主要参数:

参数 含义 选项
grade

限流阈值类型

0 基于线程数

1 基于QPS

count 限流阈值  
controlBehavior QPS流量控制中对超过阈值的流量处理手段

0 直接拒绝

1 Warm Up

2 匀速排队

strategy 调用关系限流策略

0 根据调用方限流(limitApp)

1 根据调用链路入口限流

2 具有关系的资源流量控制

limitApp 调用来源 default 不区分调用者
{some_origin_name} 针对特定的调用者
other 针对除 {some_origin_name} 以外的其余调用方

匀速排队模式演示:

把controlBehavior设置为2,即匀速排队模式,同时增加一个参数maxQueueingTimeMs值为20000。再次快速刷新浏览器观察影响。

Sentinel控制台

Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。

下载
https://github.com/alibaba/Sentinel/releases

启动
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

使用
http://localhost:8080/
(用户名和密码都是sentinel)

修改payment-service的bootstrap.yml

spring:application:name: payment-servicecloud:nacos:config:server-addr: 127.0.0.1:8848discovery:server-addr: 127.0.0.1:8848sentinel:eager: truetransport:dashboard: localhost:8080datasource:ds1:nacos:server-addr: 127.0.0.1:8848dataId: ${spring.application.name}-flow-rulesdata-type: jsonrule-type: flow

重启应用后在Sentinel控制台中可以看到相关信息

示例源码

链接:https://pan.baidu.com/s/1_oo1-yY0Jb-aC3hBoozk-w 
提取码:4uw7

Spring Cloud Alibaba实战(三) - Sentinel之限流相关推荐

  1. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!

    前一篇文章介绍了Spring Cloud Gateway的一些基础知识点,今天陈某就来唠一唠网关层面如何做限流? 文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流 ...

  2. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战

    文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流实现,过滤器是RequestRateLimiterGatewayFilterFactory,不过这种上不了台面的就 ...

  3. 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...

  4. Spring Cloud Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    文章目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashbo ...

  5. 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用

    官网 https://sentinelguard.io/ 服务雪崩 微服务中各个服务之间通过http/rpc互相调用,假设其中1个服务因为网络或自身原因出现问题,调用这个服务就会出现线程堵塞,此时若有 ...

  6. 三、spring cloud alibaba学习(Sentinel)

    雪崩效应 也叫级联故障,基础服务故障导致上层服务故障,并不断放大的过程. 例如C-->B-->A,A挂了,B调用A超时,B的线程有限,满了以后导致B也挂了,逐渐导致C及后面的也挂了,就像滚 ...

  7. Spring Cloud Alibaba (三)Sentinel 简单介绍和使用

    前言 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统自适应保护等多个维度来帮助您保障微服务 ...

  8. Spring Cloud Alibaba 实战(四)Oauth2篇【单点登录】

    1. Oauth2 简介 OAuth2 其实是一个关于授权的网络标准,它制定了设计思路和运行流程,利用这个标准我们其实是可以自己实现 OAuth2 的认证过程的. spring-cloud-start ...

  9. Spring Cloud Alibaba 实战(五)Zuul篇

    网关:主要作用认证和鉴权.最合适的解决办法是:网关解决认证问题, 子系统解决授权问题. 1. Zuul 简介 Zuul 微服务网关是为 Spring Cloud Netflix 提供动态路由,监控,弹 ...

最新文章

  1. 用C#对ADO.NET数据库完成简单操作
  2. Android重要组件之一 Service 服务讲解学习(一)
  3. linux vnc xstartup,vnc 远程桌面选择的配置 xstartup
  4. 香农定理和奈奎斯特定理区别_「中考复习」三大变换之旋转(旋转的构造-托勒密定理)...
  5. python有几种模式_python的设计模式都有哪些?
  6. ajax为什么有时候不行,为什么不能用ajax调用
  7. 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)
  8. 维修点滴:键盘进杂物
  9. python两个一维数组合并_python:16.合并两个排序的链表
  10. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·008【首页开发】
  11. C#中IPAddress与域名的使用
  12. 人工智能+社交 csdn_关于AI和社交媒体虚假信息,我们需要尽快进行三大讨论
  13. 电机学(2) - 变压器
  14. 创新案例分享 | 升级改造干部档案管理系统,精确剖析干部执行力情况
  15. 大学如何自学计算机科学与技术?
  16. 经传主力控盘指标公式 清晰的主力控盘程度详解 通达信选股指标
  17. 用户管理的备份恢复(2)
  18. 京训钉怎么快速看完_在钉钉用培训机构CRM管理系统,助力协同办公一体化
  19. 软件构造Lab2-Playing Chess
  20. 【WLAN】【测试】WLAN相关测试软件一览

热门文章

  1. 微软又给我们证明了竞争才有创新!
  2. 百度某新员工吐槽:前人代码写得像一坨屎,颠覆了对大厂的认知
  3. OPSS-PEG-N3叠氮聚乙二醇巯基吡啶, N3-PEG-OPSS,点击化学PEG试剂
  4. 【pwn学习】堆溢出(一)
  5. HTB-Passage
  6. Makefile中的条件编译:ifeq、ifneq、ifdef和ifndef
  7. 名帖88 蔡襄 楷书《杜牧诗句》
  8. java qq邮箱发送端口号_java实现qq邮箱的发送
  9. 【JavaScript高级】ES7-ES13常用新特性
  10. 来自祖安的简单计算器(高精度)