1,下载 sentinel-dashboard.jar 控制面板
2, 运行控制面板 java -Dserver.port=8088 -Dcsp.sentinel.dashboard.server=localhost:8088 -Dproject.name=AAA -jar sentinel-dashboard.jar
3,在需要进行流量控制的项目中引入jar包:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.1</version>
</dependency>
<!-- 如果是webflux项目则需要引入此包 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-webflux-adapter</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.1</version>
</dependency>
<!--
如果不加入此jar包会提示:
机器 192.168.1.136:8719 的 Sentinel 客户端版本不支持热点参数限流功能,请升级至 0.2.0 以上版本并引入 sentinel- parameter-flow-control 依赖。 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
<version>1.8.1</version>
</dependency>
4,在需要做流控的代码块加入:
1,webflux:
1.1
@Configuration public class WebFluxConfig { private final List<ViewResolver> viewResolvers; private final ServerCodecConfigurer serverCodecConfigurer; public WebFluxConfig(ObjectProvider<List<ViewResolver>> viewResolversProvider, ServerCodecConfigurer serverCodecConfigurer) { this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList); this.serverCodecConfigurer = serverCodecConfigurer; } @Bean @Order(-1) public SentinelBlockExceptionHandler sentinelBlockExceptionHandler() { // 注册 SentinelBlockExceptionHandler 处理流控降级异常 return new SentinelBlockExceptionHandler(viewResolvers, serverCodecConfigurer); } @Bean @Order(-1) public SentinelWebFluxFilter sentinelWebFluxFilter() { // 注册 SentinelWebFluxFilter return new SentinelWebFluxFilter(); } }
1.2
return chain.filter(build).transform(new SentinelReactorTransformer<>("resourceName"));
1.3
private void initFlowRules() { List<FlowRule> rules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("resourceName"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // Set limit QPS to 20. rule.setCount(20); rules.add(rule); FlowRuleManager.loadRules(rules); }
1.4 在项目启动后初始化流控规则
initFlowRules();
2.1, 普通项目:
try(Entry entry = SphU.entry("resourceName")) { // 被保护的逻辑 ........ } catch (BlockException ex) { // 处理被流控的逻辑 return "系统繁忙,请稍后再试!"; }
2.2
private void initFlowRules() { List<FlowRule> rules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("resourceName"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // Set limit QPS to 20. rule.setCount(20); rules.add(rule); FlowRuleManager.loadRules(rules); }
2.3 在项目启动后初始化流控规则
initFlowRules();
3 启动项目时加上如下虚拟机参数即可:
-Dcsp.sentinel.dashboard.server=localhost:8088 -Dproject.name=XXX
全部评论