once do, do it well

发布时间 2023-04-11 22:00:48作者: buguge

昨天出现一个生产问题。我们的channel系统代码里,调用其中一个三方服务商的http接口时未设置超时时间。碰巧昨天出现一笔http请求持续数小时始终无响应,加之程序是单线程处理交易请求,就出现因为线程一直处于RUNNABLE状态而导致系统生产能力严重下降。

现在说这个结论很easy,而昨天排查这个问题却很是花费了许多周折。

那么,解决这个问题,自然是为这个服务商的http请求设置合理的超时时间。

组内的小伙很快fix了这段代码,为方法里的http请求设置了connectTimeout和socketTimeout。

 

 

 

发现问题,上来就解决,往往是低效的方式。

为什么这么说呢?

曾经我们系统化地调整过channel里的对外http连接的超时时间。而怎么单单遗漏了这个服务商呢?原来,查看代码才发现,是这个服务商并没有依赖我们的公共的http util类,而是单独写的http post方法,藏匿得比较深。

consequently,once do,do it well。通过review代码后,我改成了让这个服务商也调用公共的http util来实现http通信。