[eggjs/egg][Feature Request] 我想问一下关于egg项目怎么杀死worker

2024-06-28 290 views
3
  1. 我起的服务的接口被调用后,中间有异步函数,不需要等它执行完成,当我的接口返回结果以后,还是会在后台继续执行
  2. 当被调用次数过多,而且是循环调用,会影响整个服务,最终会崩掉
  1. 基于以上的这个问题,我想问一下,如何在我的接口结束的时候,直接就让这个worker挂掉,或者让异步函数不要再继续执行了
  1. 感谢

回答

5
  1. Node 不是 Java,一个 worker 是同时服务多个请求的,不能 kill。不要用 Java 的思路来写 Node。
  2. 『异步函数还一直在执行』-- 你应该解决掉这个 Bug,不让它执行。
4

嗯,甲方的需求,不是bug,他们有一个接口,在这里被我们调用,然而,并不一定会成功,我给的超时时间是30秒,他还不接受批量一次调用,只能循环调用,我想做的事情就是在我的函数执行完成返回后,直接把这个干掉

7

http 调用下游接口,可以设置超时时间的,你设置个超时就好了。

3

已经设置过了,给的是30秒,比如上传30个图片,我这边打包处理的搞定了,然后得轮询30次异步调用这个他这个接口,把这些图片给他,这个时候我的接口已经返回给前端了,但是30个图片的异步函数还在处理中,我就是想问一下,是不是有什么方法,可以在接口执行完成后,直接杀掉

9

如果没处理完,你就结束掉,业务逻辑不会有问题么。。。 对方都没接收完毕。

不要想着杀死杀死,这是你的代码逻辑问题。

如果设置了超时时间,那你这个 curl 的 promise 在 30s 后肯定就结束了,如果没结束,那应该是你的代码逻辑问题。

你可能需要看下 async、promise,还有 ctx.runInBackground 相关知识。

2

嗯,好的 这个是额外,他们利用我们的接口来搞机器学习(因为他们是甲方),所以我说这个成功与否,调用完成与否是无关紧要的,就是所有业务逻辑外的东西 我现在已经注释掉了,这几天运行很正常 其实就是调用次数太多,一天几万次这样的报错 -/xxx.xxx.xxx.xxx/-/187451ms POST /xxx,小服务器承受不了

你说的后面的我自己再去补一补

7

报错说明是你的代码逻辑有问题,解决掉就好了。

空对空聊没啥意义,有更多信息的话(如提供最小可复现仓库以及更详细的报错信息)再 reopen 吧,先关闭了。