Open houdq opened 11 months ago
核心代码
// 使用Resilience4j的熔断器
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackMethod")
public String myService() {
// 调用可能会失败的方法
}
// 降级方法
public String fallbackMethod(Throwable throwable) {
return "Fallback response";
}
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
代码示例
@SpringBootApplication
@RestController
@EnableHystrix
public class MyHystrixApplication {
public static void main(String[] args) {
SpringApplication.run(MyHystrixApplication.class, args);
}
@Autowired
HystrixClient hystrixClient;
@HystrixCommand(fallbackMethod = "fallback", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
})
@GetMapping("/hello")
public String hello() throws InterruptedException {
Thread.sleep(3000);
String value = hystrixClient.get();
return value;
}
String fallback() {
System.out.println("fallback");
return "fallback";
}
}
官网下载 https://github.com/alibaba/Sentinel/releases
java -jar -Dserver.port=10086 app/sentinel-dashboard-2.0.0-alpha-preview.jar
访问 localhost:10086
添加 jar 依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2021.1</version>
</dependency>
配置文件
spring:
application:
name: my-sentinel-local
cloud:
sentinel:
eager: true
transport:
dashboard: localhost:10086
# port: 8719
熔断(Circuit Breaker):熔断是一种防止故障扩散的策略。当一个服务出现故障或超时,熔断器会打开并快速失败,拒绝后续的请求,避免请求堆积和资源耗尽。熔断器会暂时屏蔽该服务,并在一段时间后尝试恢复。熔断器的状态变化可用于监控系统健康和提供告警信息。
限流(Rate Limiting):限流是一种控制系统请求流量的策略。通过设置一个请求速率阈值,限流可以限制每个客户端或用户在特定时间内的请求次数。这样可以防止过多的请求涌入系统,保护系统免受过载和压力冲击。限流可以平滑流量,避免系统突发流量的影响。
降级(Fallback):降级是一种在面对特殊业务或异常情况时保持系统可用的策略。当服务不可用时,降级服务会代替提供一些基本功能或返回预设的默认值,以确保系统依然能够提供有限的功能或服务;又或者某些特定活动场景(例如:双十一)下优先保障计算资源投入到 业务倾向的服务,降级边缘服务。