在 Java 的 Dubbo 中,“容错”通常指 服务调用失败时的处理机制。Dubbo 本身已经内置了一套完善的容错体系,开发者可以通过配置和扩展来实现不同场景下的容错需求。
下面从 核心容错机制 → 配置方式 → 高级容错方案 三个层次说明。
Dubbo 的容错核心在 Cluster 层,通过 cluster 属性配置。
| 策略 | 说明 | 适用场景 |
|---|---|---|
failover(默认) |
失败自动重试其他节点 | 读操作、幂等接口 |
failfast |
快速失败,不重试 | 非幂等写操作 |
failsafe |
失败忽略,记录日志 | 日志、统计类 |
failback |
失败后台重试 | 消息通知 |
forking |
并行调用多个节点,取最快结果 | 低延迟要求 |
broadcast |
广播所有节点,任意失败即失败 | 配置同步 |
<dubbo:reference
interface="com.xxx.UserService"
cluster="failover"
retries="2"/>
@DubboReference(cluster = "failover", retries = 2)
private UserService userService;
dubbo:
consumer:
cluster: failover
retries: 2
@DubboReference(timeout = 1000)
private UserService userService;
retries = 2 // 不包含第一次调用
⚠️ 注意:
failfast当服务不可用时返回默认值。
@DubboReference(mock = "com.xxx.UserServiceMock")
private UserService userService;
public class UserServiceMock implements UserService {
public User getUser() {
return User.defaultUser();
}
}
@DubboReference(mock = "force:return null")
Dubbo 自身不自带熔断,通常结合:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-sentinel-support</artifactId>
</dependency>
支持的容错能力:
@HystrixCommand(fallbackMethod = "fallback")
dubbo:
registries:
r1:
address: zookeeper://ip1
r2:
address: zookeeper://ip2
@DubboReference(protocol = "dubbo,tri")
✅ 读接口
failover + timeout + retries
✅ 写接口
failfast + timeout
✅ 核心业务
Sentinel 熔断 + Mock 降级
Dubbo 容错的关键点:
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。