From 01f5b186a8b0bd61e0fff9aebd5465c1ac4ada40 Mon Sep 17 00:00:00 2001 From: Amit Bhave Date: Sat, 2 Jan 2021 14:49:45 +0530 Subject: [PATCH] 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!"; + } + +}