feign 调用 快速多次调用报错 could not be queued for execution and no fallback available.

今天给一个按钮接口加了一个简单的校验,校验不通过的话,就返回给前端错误信息,然后静静期待用户的下一次点击。

但是这时候测试开始疯狂点击。。。开始报错。

报错如下:

Request processing failed; nested exception is com.netflix.hystrix.exception.HystrixRuntimeException:  ProjectClient#queryProjectById(Long) could not be queued for execution and no fallback available

 

java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@3b579e4a rejected from java.util.concurrent.ThreadPoolExecutor

 搜了一下

据说是由于Hystrix线程池满了。

Hystrix线程池的默认连接数是10,我查了我们的配置,没配,那应该就是默认配置吧,10。

上图得threads = 10,所以就是满了哇

满了就报错了。。。

解决方案大概就是修改最大连接数,coreSize、maximumSize 、maxQueueSize的大小。

不过我这个地方只需要把我的校验代码挪到feign调用代码的上面,这样就可以通过与前端的避免多次点击按钮的机制配合,完美避开多次连续的feign调用了。

前端加的避免多次点击的代码逻辑是,按钮被点击,立即置灰,直到后端返回任意的返回值。

最开始feign调用部分在校验代码的前面,feign调用之后,校验很快就返回校验不通过的返回值了,于是导致按钮可以快速的由置灰变为可用,然后接收下一次点击,这样连续多次点击就发生了,feign短时间内被多次调用了。

但是当我吧校验放在代码最前面,校验不通过这种情况,就不会走到feign调用的代码了。

完美!

 

posted @ 2022-06-24 18:24  跳之夭夭  阅读(2128)  评论(0)    收藏  举报