Heroku环境下worker.js未处理Bull队列提交的任务故障排查求助
问题排查及修复方案
- 核心问题:throng 5.x版本API调用错误
你使用的throng@5.0.0版本的配置参数和旧版不兼容,当前写法throng({ workers, start })无法正确触发执行start函数,导致worker进程从未初始化队列监听逻辑,自然不会处理任务。
修复方式有两种可选:- 调整throng调用参数适配v5版本:
// throng v5版本配置中,进程数字段为count,执行函数字段为worker throng({ count: workers, worker: start });- 降级throng到v4版本,旧版语法兼容你当前的写法:
npm install throng@4 - 次要问题:express缺少请求体解析中间件
你当前的app.js中没有配置JSON请求体解析逻辑,若提交任务的POST请求为JSON格式,request.body会是undefined,虽然不会导致任务不消费,但会导致传入队列的参数为空。请在const app = express();后补充一行配置:
app.use(express.json());
- 无用代码问题:worker.js中日志语句不可达
你写的console.log("Finished processing")在return语句之后,属于永远不会执行的死代码,需要移动到return之前才会生效。 - 验证步骤
- 修复throng调用问题后重新部署,查看Heroku worker日志确认是否打印
Started processing日志,证明初始化逻辑已执行 - 若仍有问题,可通过
heroku redis:cli进入Redis实例,执行LLEN bull:work:wait查看等待处理的任务堆积数量,确认任务确实成功入队 - 检查web和worker进程的环境变量,确认
REDIS_URL配置正确,没有Redis连接报错
- 修复throng调用问题后重新部署,查看Heroku worker日志确认是否打印
内容的提问来源于stack exchange,提问作者nickcoding2
相关产品推荐
相关产品推荐

