Spring Cloud整合Sentinel主要涉及以下几个步骤:
- 引入Sentinel依赖
- 配置Sentinel
- 使用注解定义资源
- 使用Sentinel提供的API进行控制
以下是一个基本的Spring Cloud整合Sentinel的示例:
Step 1: 在pom.xml中添加Sentinel依赖
<dependencies>
<!-- Spring Cloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
</dependencies>
Step 2: 配置Sentinel
在application.yml中配置Sentinel相关属性,例如:
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080 # Sentinel dashboard 地址
port: 8719 # 本应用与Sentinel dashboard通信的端口,默认8719
Step 3: 使用注解定义资源
在你的服务类或方法上使用Sentinel提供的注解来定义资源,例如:
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
@SentinelResource(value = "test", blockHandler = "handleException")
public String test() {
return "Hello, Sentinel";
}
public String handleException(BlockException ex) {
return "Error: " + ex.getClass().getSimpleName();
}
}
Step 4: 使用Sentinel API
在代码中可以直接使用Sentinel提供的API来对流量控制、熔断降级等进行控制。
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.Tracer;
import com.alibaba.csp.sentinel.slots.block.BlockException;
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 java.util.ArrayList;
import java.util.List;
public class SentinelDemo {
public static void main(String[] args) {
initFlowRules();
while (true) {
try (Entry entry = SphU.entry("test")) {
// 被保护的代码
System.out.println("Hello, Sentinel");
} catch (BlockException ex) {
// 处理被流量控制的情况
Tracer.trace(ex);
}
}
}
private static void initFlowRules() {
List<FlowRule> rules = new ArrayList<>();
FlowRule ru