本文接着《5小步快速集成使用sentinel限流》,继续介绍Dubbo项目如何快速集成使用Sentinel。
环境和资源准备,参看《5小步快速集成使用sentinel限流》。
下载sentinel-dashboard,然后执行命令启动:java -jar sentinel-dashboard-1.8.0.jar
启动完毕后,通过http://localhost:8080/#/dashboard访问dashboard,出现如下界面:
项目中集成sentinel分如下3步。
com.alibaba.csp
sentinel-core
1.8.0
com.alibaba.csp
sentinel-transport-simple-http
1.8.0
com.alibaba.csp
sentinel-dubbo-adapter
1.8.0
这里有一点要注意,如果有的项目之前依赖了spring-cloud-alibaba-dependencies,那要先从这个依赖里把sentinel相关依赖排除掉。不排除的情况下,可能会出现代码配置流控规则不生效的问题。
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.3.RELEASE
pom
import
com.alibaba.csp
sentinel-annotation-aspectj
com.alibaba.csp
sentinel-cluster-client-default
com.alibaba.csp
sentinel-cluster-common-default
com.alibaba.csp
sentinel-cluster-server-default
com.alibaba.csp
sentinel-datasource-extension
com.alibaba.csp
sentinel-datasource-nacos
com.alibaba.csp
sentinel-parameter-flow-control
com.alibaba.csp
sentinel-reactor-adapter
com.alibaba.csp
sentinel-spring-webflux-webflux-adapter
com.alibaba.csp
sentinel-spring-webflux-webmvc-adapter
com.alibaba.csp
sentinel-datasource-nacos
com.alibaba.csp
sentinel-spring-webflux-webmvc-adapter
com.alibaba.csp
sentinel-core
在application.properties同级目录下,增加sentinel.properties文件,配置内容如下:
# 集成到sentinel的项目名称
project.name=dubbo-sentinel-demo
# 对应的sentinel-dashboard地址
csp.sentinel.dashboard.server=localhost:8080
同时需要加载sentinel.properties配置,有两种加载方式,选择一种即可,如下:
文中我依旧使用代码方式配置流控规则,在控制台中也可以直接配置流控规则,为什么不使用控制台方式呢?主要是应用服务器的地址会变化,详细见上一篇文章《5小步快速集成使用sentinel限流》。
流控规则一般会有如下几个:
本文继续使用资源限流规则做示例。
注意,Dubbo配置被限流资源时,不能使用打注解@SentinelResource的方式。要使用类名:方法名(参数类名)的方式设置资源名。比如这样下面代码里的RES_KEY或者INTERFACE_RES_KEY:
public class FooProviderBootstrap {
// 资源名-具体方法
private static final String RES_KEY = "com.alibaba.csp.sentinel.demo.dubbo.FooService:sayHello(java.lang.String)";
// 资源名-接口
private static final String INTERFACE_RES_KEY = "com.alibaba.csp.sentinel.demo.dubbo.FooService";
public static void main(String[] args) {
initFlowRule();
System.out.println("Service provider is ready");
}
private static void initFlowRule() {
FlowRule flowRule = new FlowRule();
flowRule.setResource(RES_KEY);
flowRule.setCount(1);
flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
flowRule.setLimitApp("default");
FlowRuleManager.loadRules(Collections.singletonList(flowRule));
}
}
测试流程与上一篇文章《5小步快速集成使用sentinel限流》类似。只不过这次还需要在搭建一个dubbo-consumer调用dubbo-provider。
Dubbo项目与Web项目展示的限流资源有所不同:
限流效果如下:
本文主要介绍Dubbo项目如何快速集成Sentinel实现系统限流。整体步骤和上一篇文章《5小步快速集成使用sentinel限流》类似。只不过有2点需要注意: