Dubbo: 提供者超时问题如何优雅解决

Created on 14 Aug 2017  ·  6Comments  ·  Source: apache/dubbo

对于提供者本身执行时间过长,提供者中逻辑执行缓慢的时候,目前没法有发现有什么机制监控执行时间,执行时间就算超过预设值,仅仅只在timeoutfilter中打印Log,没找到超时打断执行线程的方法,这块有什么好办法么,消费者已经超时报错返回了,提供者仍在执行业务逻辑占用资源。

typquestion & discussion

Most helpful comment

我们现行做法是:
提供者业务逻辑执行完成后写个表或更新状态,提供另一个接口查询(也可以发送一个mq异步通知);
消费者这边超时后,轮询查(或者从mq收通知)。

不知道其他人有没有更好的办法。

All 6 comments

我们现行做法是:
提供者业务逻辑执行完成后写个表或更新状态,提供另一个接口查询(也可以发送一个mq异步通知);
消费者这边超时后,轮询查(或者从mq收通知)。

不知道其他人有没有更好的办法。

@johnraychina 轮巡查然后呢?轮巡查发现一个提供者没停下来,但是消费者已经超时返回,要找到提供者线程并停止掉么 怎么停啊 貌似interupt打断对于死循环这种根本断不掉

你好,我也遇到类似问题。consumer 超时时间设置为30秒,provider服务异常缓慢,consumer超时后,provider继续执行超过1分钟。查询交易影响不大,但针对增删改交易这种超时处理机制有没有比较好的解决办法?谢谢。

@WJspring 你好,这个问题都很头疼啊,打个比方,不用说provider跟consumer他俩,就说浏览器客户端跟后台web应用服务器之间,浏览器超时后,web服务器业务逻辑依然在跑,停不下来的,只有发送返回response的时候才知道客户端不在了,对于dubbo,provider的线程执行,超时时候没有很好地办法让他停下来的,调用stop强停,有很多问题啊,死锁,资源不释放什么的,调用interupt中断这种停止,到底停不停完全取决于程序逻辑,有没有检查中断标志位,有没有抛出InteruptException等等,普通的业务代码仍然停不下来,也困扰我很久这个问题哦

provider 执行特别耗时的应该改造为异步调用、回调吧,给provider加一个超时时间应该不是好办法。 @WJspring @wenjiahao

@chickenlj 大神 ,有没有好建议

Was this page helpful?
0 / 5 - 0 ratings