经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
sentinel?整合spring?cloud限流的过程解析
来源:jb51  时间:2022/3/29 8:43:56  对本文有异议

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

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

相关依赖

  1. <!-- 服务注册与发现 -->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>
  6. <!-- sentinel限流 -->
  7. <dependency>
  8. <groupId>com.alibaba.cloud</groupId>
  9. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  10. </dependency>

示例

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

application.yml

  1. spring:
  2. application:
  3. name: hello-sentinel
  4. cloud:
  5. nacos:
  6. discovery:
  7. server-addr: localhost:8848
  8. sentinel:
  9. transport:
  10. dashboard: localhost:8081

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

HelloController

  1. @RestController
  2. public class HelloController {
  3. @SentinelResource(value = "hello", blockHandler = "blockHandle")
  4. @RequestMapping("/hello")
  5. public String hello(){
  6. return "hello";
  7. }
  8. public String blockHandle(BlockException e){
  9. e.printStackTrace();
  10. return "被限流了";
  11. }

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

本地限流配置

CustomFlowRule

  1. public class CustomFlowRule implements InitFunc {
  2. @Override
  3. public void init() throws Exception {
  4. List<FlowRule> flowRules = new ArrayList<>();
  5. FlowRule flowRule = new FlowRule();
  6. flowRule.setResource("hello");
  7. flowRule.setCount(1);
  8. flowRule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
  9. flowRules.add(flowRule);
  10. FlowRuleManager.loadRules(flowRules);
  11. }
  12. }

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

  1. com.example.demo.rule.CustomFlowRule

jmeter 测试

  1. 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 ''
  2. 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
  3. 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)
  4. 2022-03-27 22:31:04.044 INFO 1791 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
  5. 2022-03-27 22:31:04.044 INFO 1791 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
  6. 2022-03-27 22:31:04.049 INFO 1791 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms
  7. INFO: Sentinel log output type is: file
  8. INFO: Sentinel log charset is: utf-8
  9. INFO: Sentinel log base directory is: /Users/huli/logs/csp/
  10. INFO: Sentinel log name use pid is: false
  11. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  12. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  13. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  14. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  15. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  16. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  17. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  18. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  19. com.alibaba.csp.sentinel.slots.block.flow.FlowException

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

sentinel dashboard配置限流

启动sentinel dashboard

  1. java -Dserver.port=8081 -Dcsp.sentinel.dashboard.server=localhost:8081 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
  2. 参数说明:
  3. -Dserver.port=8081:指定控制台启动端口
  4. -Dcsp.sentinel.dashboard.server:指定控制台地址和端口
  5. -Dproject.name=sentinel-dashboard:指定控制台项目名称

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

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

jmeter 测试

  1. 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 ''
  2. 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
  3. 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)
  4. 2022-03-28 08:52:05.792 INFO 853 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
  5. 2022-03-28 08:52:05.793 INFO 853 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
  6. 2022-03-28 08:52:05.802 INFO 853 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 9 ms
  7. INFO: Sentinel log output type is: file
  8. INFO: Sentinel log charset is: utf-8
  9. INFO: Sentinel log base directory is: /Users/huli/logs/csp/
  10. INFO: Sentinel log name use pid is: false
  11. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  12. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  13. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  14. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  15. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  16. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  17. com.alibaba.csp.sentinel.slots.block.flow.FlowException
  18. com.alibaba.csp.sentinel.slots.block.flow.FlowException

到此这篇关于sentinel 整合spring cloud限流的过程解析的文章就介绍到这了,更多相关sentinel 整合spring cloud限流内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号