diff --git a/cloud-demo/ReadMe.md b/cloud-demo/ReadMe.md
index b520737..bb42088 100644
--- a/cloud-demo/ReadMe.md
+++ b/cloud-demo/ReadMe.md
@@ -240,7 +240,7 @@ spring:
active: dev
cloud:
nacos:
- server-addr: ${NACOS_HOST:192.168.95.135}:8848
+ server-addr: ${NACOS_HOST:192.168.3.150}:8848
config:
namespace: ${spring.profiles.active:dev} # 动态匹配当前profile
group: DEFAULT_GROUP
@@ -425,15 +425,15 @@ public interface BunnyFeignClient {
### 负载均衡对比
-| 特性 | 客户端负载均衡 (OpenFeign) | 服务端负载均衡 (Nginx等) |
-| ------------ | ----------------------------------- | ------------------------ |
-| **实现位置** | 客户端实现 | 服务端实现 |
-| **依赖关系** | 需要服务注册中心 | 不依赖注册中心 |
-| **性能** | 直接调用,减少网络跳转 | 需要经过代理服务器 |
-| **灵活性** | 可定制负载均衡策略 | 配置相对固定 |
-| **服务发现** | 集成服务发现机制 | 需要手动维护服务列表 |
-| **适用场景** | 微服务内部调用 | 对外暴露API或跨系统调用 |
-| **容错能力** | 集成熔断机制(如Sentinel、Hystrix) | 依赖代理服务器容错配置 |
+| 特性 | 客户端负载均衡 (OpenFeign) | 服务端负载均衡 (Nginx等) |
+|----------|---------------------------|------------------|
+| **实现位置** | 客户端实现 | 服务端实现 |
+| **依赖关系** | 需要服务注册中心 | 不依赖注册中心 |
+| **性能** | 直接调用,减少网络跳转 | 需要经过代理服务器 |
+| **灵活性** | 可定制负载均衡策略 | 配置相对固定 |
+| **服务发现** | 集成服务发现机制 | 需要手动维护服务列表 |
+| **适用场景** | 微服务内部调用 | 对外暴露API或跨系统调用 |
+| **容错能力** | 集成熔断机制(如Sentinel、Hystrix) | 依赖代理服务器容错配置 |
### 高级配置
@@ -578,3 +578,209 @@ public interface ProductFeignClient {
// 方法定义
}
```
+
+## Sentinel 使用指南
+
+> [!NOTE]
+> 如果安装完Sentinel打开控制面板可以看到服务,但簇点链路为空,可能原因:
+>
+> 1. 微服务与Sentinel不在同一IP段
+> 2. 服务未发送心跳到Sentinel Dashboard
+> 3. 未正确配置`spring.cloud.sentinel.transport.dashboard`
+
+### 依赖引入
+
+```xml
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+ 2022.0.0.0
+
+```
+
+### 基础配置
+
+```yaml
+spring:
+ cloud:
+ sentinel:
+ enabled: true
+ eager: true # 提前初始化
+ transport:
+ dashboard: 192.168.3.150:8858 # Sentinel控制台地址
+ port: 8719 # 本地启动的HTTP Server端口
+ client-ip: ${spring.cloud.client.ip-address} # 客户端IP
+ filter:
+ enabled: true
+ web-context-unify: false # 关闭统一上下文(链路模式需要)
+```
+
+### 自定义异常处理
+
+#### MVC接口自定义返回
+
+```java
+@Component
+public class MyBlockExceptionHandler implements BlockExceptionHandler {
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ @Override
+ public void handle(HttpServletRequest request, HttpServletResponse response,
+ String s, BlockException e) throws Exception {
+ response.setContentType("application/json;charset=utf-8");
+ response.setStatus(429); // 建议使用429 Too Many Requests
+
+ Map result = Map.of(
+ "code", 429,
+ "message", "请求被限流",
+ "timestamp", System.currentTimeMillis(),
+ "rule", e.getRule()
+ );
+
+ objectMapper.writeValue(response.getWriter(), result);
+ }
+}
+```
+
+#### REST接口全局异常处理
+
+```java
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ @ExceptionHandler(BlockException.class)
+ public ResponseEntity