当前位置:网站首页>限流设计及实现
限流设计及实现
2022-06-26 18:20:00 【[email protected]】
第一步:添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
第二步:添加sentinel及路由规则(假如已有则无需设置)
server:
port: 9000
spring:
application:
name: sca-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yml
gateway:
routes: #配置网关路由规则
- id: route01 #路由id,自己指定一个唯一值即可
#uri: http://localhost:8081/ #网关帮我们转发的url
uri: lb://sca-provider #lb表示负载均衡,sca-provider为服务名
predicates: ###断言(谓词):匹配请求规则(进行逻辑判断) http://ip:port/nacos/provider/echo/01
- Path=/nacos/provider/echo/** #请求路径定义,此路径对应uri中的资源
# - After=2021-11-20T23:59:59.789+08:00[Asia/Shanghai]
#- Query=pageSize,\d+
filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理
- StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos
#限流设计及实现
sentinel:
eager: true
transport:
dashboard: localhost:8180第三步:启动网关项目,检测sentinel控制台的网关菜单。
启动时,添加sentinel的jvm参数,通过此菜单可以让网关服务在sentinel控制台显示不一样的菜单,代码如下。
-Dcsp.sentinel.app.type=1
说明,假如没有发现请求链路,API管理,关闭网关项目,关闭sentinel,然后重启sentinel,重启网关项目.
第四步:在sentinel面板中设置限流策略,如图所示:

第五步:通过url进行访问检测是否实现了限流操作

六,基于请求属性限流

七,自定义API维度限流(重点)

第二步:新建分组流控规则,如图所示:

第三步:进行访问测试,如图所示

八,定制流控网关返回值
定义配置类,设计流控返回值,代码如下:

方法一:在启动类同包或者子包下重新写一个类:GatewayConfig
@Configuration
public class GatewayConfig {
public GatewayConfig(){
GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
@Override
public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
Map<String,Object> map=new HashMap<>();
map.put("state",429);
map.put("message","two many request");
String jsonStr= JSON.toJSONString(map);
return ServerResponse.ok().body(Mono.just(jsonStr),String.class);
}
});
}
}
方法二:在启动类中写
配置网关:

进行访问测试,如图所示

版权声明
本文为[[email protected]@yxg]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_49143405/article/details/121629269
边栏推荐
- 零时科技 | 智能合约安全系列文章之反编译篇
- A little experience of next (ITER (dataloader))
- Case study of row lock and isolation level
- (必须掌握的多线程知识点)认识线程,创建线程,使用Thread的常见方法及属性,以及线程的状态和状态转移的意义
- gdb安装
- 字符串String转换为jsonArray并解析
- Conditional compilation in precompiling instructions
- Numpy's Matplotlib
- 物联网协议的王者:MQTT
- Regular match same character
猜你喜欢

Connected to surface test questions

Paging query and join Association query optimization

MYSQL的下载与配置 mysql远程操控

Decision tree and random forest

Digital signature standard (DSS)

数字签名标准(DSS)

成功解决之idea引用Lombok的@Slf4j后无法正常使用log

In and exceptions, count (*) query optimization

JVM入個門(1)

9. Intelligent transportation project (2)
随机推荐
MYSQL的下载与配置 mysql远程操控
Boyun, standing at the forefront of China's container industry
刻录光盘的程序步骤
深层次安全定义剖析及加密技术
DVD-数字通用光盘
行锁与隔离级别案例分析
成功解决之微服务@Value获取配置文件乱码问题
Leetcode interview question 29 clockwise print matrix
ISO documents
Applet setting button sharing function
Ethereum技术架构介绍
ros::spinOnce()和ros::spin()的使用和区别
爬取豆瓣读书Top250,导入sqlist数据库(或excel表格)中
50行代码爬取Top500图书导入TXT文档
MySQL的MVCC机制详解
【Mysql系列】工作常用sql集锦(持续更新)
Determine whether a sequence is a stack pop-up sequence
成功解决之idea引用Lombok的@Slf4j后无法正常使用log
wm_ Concat() and group_ Concat() function
同花顺开户怎么样安全吗?怎么炒股开户