dubbo 中的超时机制是针对消费者的,如果消费者调用提供者超时,那么消费者会得到一个超时的异常,看资料说超时并不会中断生产者的服务,服务端会继续执行代码。如果是这样子,岂不是服务调用成功了,但是消费者返回一个异常?要怎么处理这个问题呢?
1
h123123h OP 最后修改一下,意思就是如果消费者调用超时了会报错,但是不影响提供者继续执行代码。这样会不会造成接口失败,但提供者的逻辑执行成功了的情况,怎么解决?
|
2
lunarzzz 2020-04-25 07:59:44 +08:00 via iPhone
没想到特别好的办法,耗时长的接口可以采用异步调用,幂等接口可以重试,提供者也可以存储相应的状态并提供另一个接口用于消费者进行判断
|
3
venpong 2020-04-25 10:02:13 +08:00
@lunarzzz 你异步调用的话,在异步的接口里面也会抛异常吧?只不过是主线程接收不到异常,但是我在想 dubbo 接口为啥会超时呢?这个应该根据具体业务来解决吧,如果是查询大量数据,从优化 sql 的角度入手?或者增加超时时长?
|
4
freebird1994 2020-04-25 11:40:17 +08:00
生产者也可以配置过期时间
|
5
h123123h OP @freebird1994 生产者的时间配置是针对消费者的,并不是针对生产者的
|
6
h123123h OP @venpong 查询超时不影响业务,主要是新增修改这些。消费者超时失败了,但是生产者服务确成功了
|
7
waytodelay 2020-04-25 18:46:33 +08:00
只能抛出异常提示,系统繁忙,请刷新后重试
|
8
waytodelay 2020-04-25 18:46:51 +08:00
如果是 新增这种需要做幂等
|
9
h123123h OP @waytodelay 也就是说消费者只能抛出异常提醒,然后生产者超时的那个被调用的方法逻辑如果更新成功了,只能后面补偿?感觉这个设计有缺陷呀
|