Heroku部署BullMQ+ioredis连接Redis To Go报错ECONNREFUSED 127.0.0.1:6379
问题原因
BullMQ底层默认使用ioredis客户端连接Redis,你在index.js中手动创建的Redis客户端没有传入BullMQ的Worker实例,BullMQ会默认使用127.0.0.1:6379的本地Redis地址,完全没有用到你解析的REDISTOGO_URL配置。
本地运行正常是因为本地环境启动了默认端口的Redis服务,而Heroku的dyno没有内置本地Redis服务,因此抛出连接拒绝错误。
修复方案
你只需要在初始化BullMQ Worker时,传入Redis To Go的连接配置即可,无需单独创建冗余的Redis客户端:
const { Worker } = require('bullmq') const url = require('url') let redisConnection if (process.env.REDISTOGO_URL) { const rtg = url.parse(process.env.REDISTOGO_URL) redisConnection = { host: rtg.hostname, port: rtg.port, password: rtg.auth.split(':')[1] } } else { // 本地开发默认配置 redisConnection = { host: '127.0.0.1', port: 6379 } } // 第三个参数传入连接配置 const worker = new Worker('mailbot', `${__dirname}/processor.js`, { connection: redisConnection }) console.info('Worker listening for jobs') module.exports = { worker, }
如果使用较新版本的ioredis,你也可以直接传入Redis连接字符串简化写法:
const worker = new Worker('mailbot', `${__dirname}/processor.js`, { connection: process.env.REDISTOGO_URL || 'redis://127.0.0.1:6379' })
冗余代码清理
你原本index.js中创建的Redis客户端没有被任何逻辑使用,可以直接删除相关代码。
内容的提问来源于stack exchange,提问作者user2633709
相关产品推荐
相关产品推荐

