在 Java Dubbo 中,“防止超时”通常包含两层含义:
下面从 配置、代码、架构 三个层面系统说明。
Dubbo 超时是 客户端超时,不是服务端处理时间限制:
timeout 时间内没收到响应 → 抛 TimeoutException<dubbo:service interface="com.xxx.UserService"
ref="userService"
timeout="5000"/>
<dubbo:reference interface="com.xxx.UserService"
timeout="3000"/>
✅ 优先级:
消费端 timeout > 服务端 timeout > 全局 timeout
<dubbo:provider timeout="5000"/>
<dubbo:consumer timeout="3000"/>
不要使用默认值(1000ms)
经验值:
| 场景 | 建议 |
|---|---|
| 简单查询 | 500–1000ms |
| 复杂业务 | 3–5s |
| 文件/批量 | 10s+ |
@DubboService
public class UserServiceImpl implements UserService {
public CompletableFuture<String> getName() {
return CompletableFuture.supplyAsync(() -> "tom");
}
}
<dubbo:protocol name="dubbo" threadpool="fixed" threads="200"/>
服务端 默认不会中断任务
✅ 解决方案:
Future.cancel(true)<dubbo:service executes="100"/>
<dubbo:reference actives="10"/>
防止:
@SentinelResource(value = "getUser", fallback = "fallback")
或 Dubbo 自带:
<dubbo:reference cluster="failfast"/>
集群策略:
| 策略 | 说明 |
|---|---|
| failfast | 快速失败 |
| failsafe | 忽略异常 |
| failback | 异步重试 |
<dubbo:reference retries="0"/>
⚠️ 写操作 禁止重试
long start = System.currentTimeMillis();
// business
log.info("cost={}", System.currentTimeMillis() - start);
Dubbo 防超时 = 合理 timeout + 异步/线程隔离 + 限流 + 熔断 + 不滥用重试
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。