微服务 教程
1085个小节阅读:196.2k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
问题:
- 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
- 在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩。
- dubbo利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
使用timeout属性配置超时时间,默认值1000,单位毫秒。
xxxxxxxxxx
@Service(timeout = 3000) //当前服务3秒超时
public class OrderServiceImpl implements IOrderService {
修改服务提供者制造延迟
xxxxxxxxxx
public CommonResult<Order> findByUserId(Long userId) throws InterruptedException {
CommonResult commonResult = new CommonResult();
// 返回结果编码
commonResult.setCode(200);
// 返回结果描述信息
commonResult.setMessage("查询成功");
// 返回结果集
//TODO 模拟数据库操作 突然数据库操作很慢
Thread.sleep(4000);
Order order = new Order();
order.setId(1L);
order.setUserId(1L);
order.setPrict(121.1);
order.setMobile("18588888888");
order.setAddress("北京市海淀区中关村");
order.setPay_method(1);
commonResult.setData(order);
return commonResult;
}
xxxxxxxxxx
timeout = 2000)// 远程注入 (
private IOrderService iOrderService;
xxxxxxxxxx
com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout
com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:107) ~[dubbo-2.5.3.jar:2.5.3]
com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:84) ~[dubbo-2.5.3.jar:2.5.3]
com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker.doInvoke(DubboInvoker.java:96) ~[dubbo-2.5.3.jar:2.5.3]
上面有提到dubbo支持多种场景下设置超时时间,也说过超时是针对消费端的。那么既然超时是针对消费端,为什么服务端也可以设置超时呢?
总结:
这其实是一种策略,其实服务端的超时配置是消费端的缺省配置,即如果服务端设置了超时,任务消费端可以不设置超时时间,简化了配置。另外针对控制的粒度,Dubbo支持了接口级别也支持方法级别,可以根据不同的实际情况精确控制每个方法的超时时间。
1. Dubbo技术中给服务设置超时时间解决___问题。
A 安全性
B 速度
C 响应慢
D 服务雪崩
2. Dubbo技术中如何设置服务的超时时间。
A @service(time=1000)
B @service(timeout=3000)
C @Reference(time=1000)
1=>D 2=>B