sentinel 整合spring cloud限流的过程解析

网友投稿 368 2022-08-17


sentinel 整合spring cloud限流的过程解析

spring cloud基于http进行服务调用,大致过程如下:

服务提供端:提供http接口,并向服务中心注册服务信息服务消费端:将服务端的http接口作为本地服务,从注册中心读取服务提供端信息,使用feign发起远程调用

相关依赖

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

示例

为简化处理,直接对url接口进行限流,不做服务调用

application.yml

spring:

application:

name: hello-sentinel

cloud:

nacos:

discovery:

server-addr: localhost:8848

sentinel:

transport:

dashboard: localhost:8081

限流可使用本地配置、或者sentinel dashboard配置

HelloController

@RestController

public class HelloController {

@SentinelResource(value = "hello", blockHandler = "blockHandle")

@RequestMapping("/hello")

public String hello(){

return "hello";

}

public String blockHandle(BlockException e){

e.printStackTrace();

return "被限流了";

}

************

本地限流配置

CustomFlowRule

public class CustomFlowRule implements InitFunc {

@Override

public void init() throws Exception {

List flowRules = new ArrayList<>();

FlowRule flowRule = new FlowRule();

flowRule.setResource("hello");

flowRule.setCount(1);

flowRule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);

flowRules.add(flowRule);

FlowRuleManager.loadRules(flowRules);

}

}

META-INF/services/com.alibaba.csp.sentinel.init.InitFunc

com.example.demo.rule.CustomFlowRule

jmeter 测试

2022-03-27 22:30:50.534 INFO 1791 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''

2022-03-27 22:30:50.547 INFO 1791 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP hello-sentinel 192.168.5.11:8080 register finished

2022-03-27 22:30:50.557 INFO 1791 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 2.227 seconds (JVM running for 2.824)

2022-03-27 22:31:04.044 INFO 1791 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'

2022-03-27 22:31:04.044 INFO 1791 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'

2022-03-27 22:31:04.049 INFO 1791 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms

INFO: Sentinel log output type is: file

INFO: Sentinel log charset is: utf-8

INFO: Sentinel log base directory is: /Users/huli/logs/csp/

INFO: Sentinel log name use pid is: false

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

************

sentinel dashboard配置限流

启动sentinel dashboard

java -Dserver.port=8081 -Dcsp.sentinel.dashboard.server=localhost:8081 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

参数说明:

-Dserver.port=8081:指定控制台启动端口

-Dcsp.sentinel.dashboard.server:指定控制台地址和端口

-Dproject.name=sentinel-dashboard:指定控制台项目名称

localhost:8081,控制台配置流控策略

说明:若需使用本地降级方法,需在下方的hello配置流控规则

jmeter 测试

2022-03-28 08:50:29.165 INFO 853 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''

2022-03-28 08:50:29.198 INFO 853 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP hello-sentinel 192.168.5.11:8080 register finished

2022-03-28 08:50:29.210 INFO 853 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 3.315 seconds (JVM running for 4.03)

2022-03-28 08:52:05.792 INFO 853 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'

2022-03-28 08:52:05.793 INFO 853 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'

2022-03-28 08:52:05.802 INFO 853 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 9 ms

INFO: Sentinel log output type is: file

INFO: Sentinel log charset is: utf-8

INFO: Sentinel log base directory is: /Users/huli/logs/csp/

INFO: Sentinel log name use pid is: false

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException

com.alibaba.csp.sentinel.slots.block.flow.FlowException


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Netty分布式ByteBuf使用subPage级别内存分配剖析
下一篇:Netty分布式ByteBuf使用的回收逻辑剖析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~