想问一下关于 dubbo 超时机制的问题

2020 年 4 月 25 日
 h123123h

dubbo 中的超时机制是针对消费者的,如果消费者调用提供者超时,那么消费者会得到一个超时的异常,看资料说超时并不会中断生产者的服务,服务端会继续执行代码。如果是这样子,岂不是服务调用成功了,但是消费者返回一个异常?要怎么处理这个问题呢?

2876 次点击
所在节点    程序员
9 条回复
h123123h
2020 年 4 月 25 日
最后修改一下,意思就是如果消费者调用超时了会报错,但是不影响提供者继续执行代码。这样会不会造成接口失败,但提供者的逻辑执行成功了的情况,怎么解决?
lunarzzz
2020 年 4 月 25 日
没想到特别好的办法,耗时长的接口可以采用异步调用,幂等接口可以重试,提供者也可以存储相应的状态并提供另一个接口用于消费者进行判断
venpong
2020 年 4 月 25 日
@lunarzzz 你异步调用的话,在异步的接口里面也会抛异常吧?只不过是主线程接收不到异常,但是我在想 dubbo 接口为啥会超时呢?这个应该根据具体业务来解决吧,如果是查询大量数据,从优化 sql 的角度入手?或者增加超时时长?
freebird1994
2020 年 4 月 25 日
生产者也可以配置过期时间
h123123h
2020 年 4 月 25 日
@freebird1994 生产者的时间配置是针对消费者的,并不是针对生产者的
h123123h
2020 年 4 月 25 日
@venpong 查询超时不影响业务,主要是新增修改这些。消费者超时失败了,但是生产者服务确成功了
waytodelay
2020 年 4 月 25 日
只能抛出异常提示,系统繁忙,请刷新后重试
waytodelay
2020 年 4 月 25 日
如果是 新增这种需要做幂等
h123123h
2020 年 4 月 25 日
@waytodelay 也就是说消费者只能抛出异常提醒,然后生产者超时的那个被调用的方法逻辑如果更新成功了,只能后面补偿?感觉这个设计有缺陷呀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/665863

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX