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..612cbcbfbe
--- /dev/null
+++ b/spring-cloud/spring-cloud-sentinel/pom.xml
@@ -0,0 +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
+
+
+
+
+ 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
+
+
diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/SentinelApplication.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/SentinelApplication.java
new file mode 100644
index 0000000000..4d921844df
--- /dev/null
+++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/SentinelApplication.java
@@ -0,0 +1,11 @@
+package com.baeldung.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/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
new file mode 100644
index 0000000000..4dfacef999
--- /dev/null
+++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/config/SentinelAspectConfiguration.java
@@ -0,0 +1,65 @@
+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;
+
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+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 init() {
+ initFlowRules();
+ initDegradeRules();
+ initSystemProtectionRules();
+ }
+
+ private void initFlowRules() {
+ List flowRules = new ArrayList<>();
+ FlowRule flowRule = new FlowRule();
+ // Defined resource
+ flowRule.setResource(RESOURCE_NAME);
+ 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);
+ }
+
+ 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);
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/controller/GreetingController.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/controller/GreetingController.java
new file mode 100644
index 0000000000..fa3852466d
--- /dev/null
+++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/controller/GreetingController.java
@@ -0,0 +1,20 @@
+package com.baeldung.spring.cloud.sentinel.controller;
+
+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 {
+
+ @Autowired
+ private GreetingService greetingService;
+
+ @GetMapping("/hello")
+ public String getGreeting() {
+ return greetingService.getGreeting();
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/service/GreetingService.java b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/service/GreetingService.java
new file mode 100644
index 0000000000..e60d679b92
--- /dev/null
+++ b/spring-cloud/spring-cloud-sentinel/src/main/java/com/baeldung/spring/cloud/sentinel/service/GreetingService.java
@@ -0,0 +1,19 @@
+package com.baeldung.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!";
+ }
+
+}