From 01f5b186a8b0bd61e0fff9aebd5465c1ac4ada40 Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Sat, 2 Jan 2021 14:49:45 +0530 Subject: [PATCH 1/7] BAEL-3636 - introduction to alibaba sentinel --- spring-cloud/pom.xml | 1 + spring-cloud/spring-cloud-sentinel/pom.xml | 35 +++++++++++++++++++ .../cloud/sentinel/SentinelApplication.java | 11 ++++++ .../config/SentinelAspectConfiguration.java | 35 +++++++++++++++++++ .../controller/GreetingController.java | 19 ++++++++++ .../sentinel/service/GreetingService.java | 19 ++++++++++ 6 files changed, 120 insertions(+) create mode 100644 spring-cloud/spring-cloud-sentinel/pom.xml create mode 100644 spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/SentinelApplication.java create mode 100644 spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/config/SentinelAspectConfiguration.java create mode 100644 spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/controller/GreetingController.java create mode 100644 spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/service/GreetingService.java diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index c0e452afaf..efa9df40d9 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -44,6 +44,7 @@ spring-cloud-circuit-breaker spring-cloud-eureka-self-preservation + spring-cloud-sentinel diff --git a/spring-cloud/spring-cloud-sentinel/pom.xml b/spring-cloud/spring-cloud-sentinel/pom.xml new file mode 100644 index 0000000000..8864baa7b2 --- /dev/null +++ b/spring-cloud/spring-cloud-sentinel/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + spring-cloud-sentinel + spring-cloud-sentinel + http://maven.apache.org + pom + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-alibaba-sentinel + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + UTF-8 + + diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/SentinelApplication.java b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/SentinelApplication.java new file mode 100644 index 0000000000..4459c8374d --- /dev/null +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/SentinelApplication.java @@ -0,0 +1,11 @@ +package org.spring.cloud.sentinel; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SentinelApplication { + public static void main(String[] args) { + SpringApplication.run(SentinelApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/config/SentinelAspectConfiguration.java b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/config/SentinelAspectConfiguration.java new file mode 100644 index 0000000000..5241c59527 --- /dev/null +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/config/SentinelAspectConfiguration.java @@ -0,0 +1,35 @@ +package org.spring.cloud.sentinel.config; + +import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect; +import com.alibaba.csp.sentinel.slots.block.RuleConstant; +import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; +import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; + +@Configuration +public class SentinelAspectConfiguration { + + @Bean + public SentinelResourceAspect sentinelResourceAspect() { + return new SentinelResourceAspect(); + } + + @PostConstruct + public void initFlowRules() { + List flowRules = new ArrayList<>(); + FlowRule flowRule = new FlowRule(); + // Defined resource + flowRule.setResource("greeting"); + flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS); + // number of requests that QPS can pass in a second + flowRule.setCount(1); + flowRules.add(flowRule); + FlowRuleManager.loadRules(flowRules); + } + +} diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/controller/GreetingController.java b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/controller/GreetingController.java new file mode 100644 index 0000000000..83d68e6444 --- /dev/null +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/controller/GreetingController.java @@ -0,0 +1,19 @@ +package org.spring.cloud.sentinel.controller; + +import org.spring.cloud.sentinel.service.GreetingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class GreetingController { + + @Autowired + private GreetingService greetingService; + + @GetMapping("/hello") + public String getGreeting() { + return greetingService.getGreeting(); + } + +} diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/service/GreetingService.java b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/service/GreetingService.java new file mode 100644 index 0000000000..3c45401ca1 --- /dev/null +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/service/GreetingService.java @@ -0,0 +1,19 @@ +package org.spring.cloud.sentinel.service; + +import com.alibaba.csp.sentinel.annotation.SentinelResource; +import org.springframework.stereotype.Service; + +@Service +public class GreetingService { + + @SentinelResource(value = "greeting", fallback = "getGreetingFallback") + public String getGreeting() { + return "Hello World!"; + } + + public String getGreetingFallback(Throwable e) { + e.printStackTrace(); + return "Bye world!"; + } + +} From 8b9ee317500fa365bcf1d9d031e83cacbf264fd9 Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Tue, 26 Jan 2021 11:00:31 +0530 Subject: [PATCH 2/7] BAEL-3636 remove duplicate spring web starter dependency --- spring-cloud/spring-cloud-sentinel/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spring-cloud/spring-cloud-sentinel/pom.xml b/spring-cloud/spring-cloud-sentinel/pom.xml index 8864baa7b2..e1ed26a716 100644 --- a/spring-cloud/spring-cloud-sentinel/pom.xml +++ b/spring-cloud/spring-cloud-sentinel/pom.xml @@ -13,10 +13,6 @@ - - org.springframework.boot - spring-boot-starter-web - org.springframework.cloud spring-cloud-starter-alibaba-sentinel From 18d754bda4af1ad275e67810356461b4a87e6724 Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Tue, 26 Jan 2021 11:59:20 +0530 Subject: [PATCH 3/7] BAEL-3636 fix pom dependencies problem --- spring-cloud/spring-cloud-sentinel/pom.xml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/spring-cloud/spring-cloud-sentinel/pom.xml b/spring-cloud/spring-cloud-sentinel/pom.xml index e1ed26a716..e14fca0354 100644 --- a/spring-cloud/spring-cloud-sentinel/pom.xml +++ b/spring-cloud/spring-cloud-sentinel/pom.xml @@ -13,15 +13,19 @@ - - org.springframework.cloud - spring-cloud-starter-alibaba-sentinel - - org.springframework.boot - spring-boot-starter-test - test + spring-boot-starter-web + + + com.alibaba.csp + sentinel-core + 1.8.0 + + + com.alibaba.csp + sentinel-annotation-aspectj + 1.8.0 From 8cbc8d5a3ad2d0f25e671aca1617aa22840f1fa5 Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Tue, 9 Feb 2021 19:18:23 +0530 Subject: [PATCH 4/7] BAEL-3636 Change package name and format xml according to feedback --- spring-cloud/spring-cloud-sentinel/pom.xml | 64 ++++++++++--------- .../cloud/sentinel/SentinelApplication.java | 2 +- .../config/SentinelAspectConfiguration.java | 2 +- .../controller/GreetingController.java | 5 +- .../sentinel/service/GreetingService.java | 2 +- 5 files changed, 39 insertions(+), 36 deletions(-) rename spring-cloud/spring-cloud-sentinel/src/main/java/{org => com/baeldung}/spring/cloud/sentinel/SentinelApplication.java (87%) rename spring-cloud/spring-cloud-sentinel/src/main/java/{org => com/baeldung}/spring/cloud/sentinel/config/SentinelAspectConfiguration.java (95%) rename spring-cloud/spring-cloud-sentinel/src/main/java/{org => com/baeldung}/spring/cloud/sentinel/controller/GreetingController.java (77%) rename spring-cloud/spring-cloud-sentinel/src/main/java/{org => com/baeldung}/spring/cloud/sentinel/service/GreetingService.java (88%) diff --git a/spring-cloud/spring-cloud-sentinel/pom.xml b/spring-cloud/spring-cloud-sentinel/pom.xml index e14fca0354..a78cd8e74d 100644 --- a/spring-cloud/spring-cloud-sentinel/pom.xml +++ b/spring-cloud/spring-cloud-sentinel/pom.xml @@ -1,35 +1,37 @@ - - 4.0.0 - spring-cloud-sentinel - spring-cloud-sentinel - http://maven.apache.org - pom - - com.baeldung.spring.cloud - spring-cloud - 1.0.0-SNAPSHOT - + + 4.0.0 + spring-cloud-sentinel + spring-cloud-sentinel + http://maven.apache.org + pom + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + - - - org.springframework.boot - spring-boot-starter-web - - - com.alibaba.csp - sentinel-core - 1.8.0 - - - com.alibaba.csp - sentinel-annotation-aspectj - 1.8.0 - - + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.csp + sentinel-core + 1.8.0 + + + com.alibaba.csp + sentinel-annotation-aspectj + 1.8.0 + + - - UTF-8 - + + UTF-8 + diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/SentinelApplication.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/SentinelApplication.java similarity index 87% rename from spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/SentinelApplication.java rename to spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/SentinelApplication.java index 4459c8374d..4d921844df 100644 --- a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/SentinelApplication.java +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/SentinelApplication.java @@ -1,4 +1,4 @@ -package org.spring.cloud.sentinel; +package com.baeldung.spring.cloud.sentinel; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/config/SentinelAspectConfiguration.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java similarity index 95% rename from spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/config/SentinelAspectConfiguration.java rename to spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java index 5241c59527..8ddceaa58f 100644 --- a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/config/SentinelAspectConfiguration.java +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java @@ -1,4 +1,4 @@ -package org.spring.cloud.sentinel.config; +package com.baeldung.spring.cloud.sentinel.config; import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect; import com.alibaba.csp.sentinel.slots.block.RuleConstant; diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/controller/GreetingController.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/controller/GreetingController.java similarity index 77% rename from spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/controller/GreetingController.java rename to spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/controller/GreetingController.java index 83d68e6444..fa3852466d 100644 --- a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/controller/GreetingController.java +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/controller/GreetingController.java @@ -1,10 +1,11 @@ -package org.spring.cloud.sentinel.controller; +package com.baeldung.spring.cloud.sentinel.controller; -import org.spring.cloud.sentinel.service.GreetingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import com.baeldung.spring.cloud.sentinel.service.GreetingService; + @RestController public class GreetingController { diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/service/GreetingService.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/service/GreetingService.java similarity index 88% rename from spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/service/GreetingService.java rename to spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/service/GreetingService.java index 3c45401ca1..e60d679b92 100644 --- a/spring-cloud/spring-cloud-sentinel/src/main/java/org/spring/cloud/sentinel/service/GreetingService.java +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/service/GreetingService.java @@ -1,4 +1,4 @@ -package org.spring.cloud.sentinel.service; +package com.baeldung.spring.cloud.sentinel.service; import com.alibaba.csp.sentinel.annotation.SentinelResource; import org.springframework.stereotype.Service; From 9efb7c68e677d7bd0ff9cba517264793f3c49b8d Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Sun, 21 Mar 2021 18:57:06 +0530 Subject: [PATCH 5/7] BAEL-3636 Add sentinel dashboard dependency --- spring-cloud/spring-cloud-sentinel/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spring-cloud/spring-cloud-sentinel/pom.xml b/spring-cloud/spring-cloud-sentinel/pom.xml index a78cd8e74d..c8f79f5f40 100644 --- a/spring-cloud/spring-cloud-sentinel/pom.xml +++ b/spring-cloud/spring-cloud-sentinel/pom.xml @@ -29,6 +29,11 @@ sentinel-annotation-aspectj 1.8.0 + + com.alibaba.csp + sentinel-transport-simple-http + 1.8.0 + From ce2995c1cd42a21d8a392ba9fd674a968b71df4c Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Sun, 21 Mar 2021 19:23:03 +0530 Subject: [PATCH 6/7] BAEL-3636 Use spaces instead of tabs --- spring-cloud/spring-cloud-sentinel/pom.xml | 74 +++++++++++----------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/spring-cloud/spring-cloud-sentinel/pom.xml b/spring-cloud/spring-cloud-sentinel/pom.xml index c8f79f5f40..612cbcbfbe 100644 --- a/spring-cloud/spring-cloud-sentinel/pom.xml +++ b/spring-cloud/spring-cloud-sentinel/pom.xml @@ -1,42 +1,42 @@ - 4.0.0 - spring-cloud-sentinel - spring-cloud-sentinel - http://maven.apache.org - pom - - com.baeldung.spring.cloud - spring-cloud - 1.0.0-SNAPSHOT - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + 4.0.0 + spring-cloud-sentinel + spring-cloud-sentinel + http://maven.apache.org + pom + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + - - - org.springframework.boot - spring-boot-starter-web - - - com.alibaba.csp - sentinel-core - 1.8.0 - - - com.alibaba.csp - sentinel-annotation-aspectj - 1.8.0 - - - com.alibaba.csp - sentinel-transport-simple-http - 1.8.0 - - + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.csp + sentinel-core + 1.8.0 + + + com.alibaba.csp + sentinel-annotation-aspectj + 1.8.0 + + + com.alibaba.csp + sentinel-transport-simple-http + 1.8.0 + + - - UTF-8 - + + UTF-8 + From 71119f2193b49574e29a546c6bd3e8e8544ec98c Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Sun, 4 Apr 2021 21:49:59 +0530 Subject: [PATCH 7/7] BAEL-3636 Add degrade and system protection rules configurations --- .../config/SentinelAspectConfiguration.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java index 8ddceaa58f..4dfacef999 100644 --- a/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java +++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java @@ -2,8 +2,12 @@ package com.baeldung.spring.cloud.sentinel.config; import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect; import com.alibaba.csp.sentinel.slots.block.RuleConstant; +import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; +import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import com.alibaba.csp.sentinel.slots.system.SystemRule; +import com.alibaba.csp.sentinel.slots.system.SystemRuleManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -14,17 +18,25 @@ import java.util.List; @Configuration public class SentinelAspectConfiguration { + public static final String RESOURCE_NAME = "greeting"; + @Bean public SentinelResourceAspect sentinelResourceAspect() { return new SentinelResourceAspect(); } @PostConstruct - public void initFlowRules() { + public void init() { + initFlowRules(); + initDegradeRules(); + initSystemProtectionRules(); + } + + private void initFlowRules() { List flowRules = new ArrayList<>(); FlowRule flowRule = new FlowRule(); // Defined resource - flowRule.setResource("greeting"); + flowRule.setResource(RESOURCE_NAME); flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS); // number of requests that QPS can pass in a second flowRule.setCount(1); @@ -32,4 +44,22 @@ public class SentinelAspectConfiguration { FlowRuleManager.loadRules(flowRules); } + private void initDegradeRules() { + List rules = new ArrayList(); + DegradeRule rule = new DegradeRule(); + rule.setResource(RESOURCE_NAME); + rule.setCount(10); + rule.setTimeWindow(10); + rules.add(rule); + DegradeRuleManager.loadRules(rules); + } + + private void initSystemProtectionRules() { + List rules = new ArrayList<>(); + SystemRule rule = new SystemRule(); + rule.setHighestSystemLoad(10); + rules.add(rule); + SystemRuleManager.loadRules(rules); + } + }