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调用的代码了。
完美!

浙公网安备 33010602011771号