Heroku环境下NestJS BullModule无法连接Redis Cloud求助
Nest.js + Bull 连接Redis Cloud超时问题
问题说明
我试过各种办法让Redis在Nest.js应用里和Bull配合工作,但每次运行任务都会重试多次后超时。本地用主机和端口跑代码完全正常,就是连不上Redis Cloud实例。Heroku给了REDISCLOUD_URL环境变量,我把它拆成主机、端口、用户名、密码四个变量,试了所有参数组合都没解决。当前代码如下:
@Module({ imports: [ AppDataModule, BullModule.forRoot({ redis: { host: AppConfig.REDIS.HOST, port: AppConfig.REDIS.PORT, username: AppConfig.REDIS.USERNAME, password: AppConfig.REDIS.PASSWORD, db: 0, tls: { rejectUnauthorized: false, requestCert: true, }, } } ), ], exports: [BullModule], }) export class MyQueue {}
解决建议
直接使用完整Redis URL
Bull底层依赖的ioredis支持直接解析完整的Redis URL,手动拆分参数容易出错,直接用REDISCLOUD_URL更可靠:
@Module({ imports: [ AppDataModule, BullModule.forRoot({ redis: process.env.REDISCLOUD_URL, }), ], exports: [BullModule], }) export class MyQueue {}
排查其他可能问题
- 确认Heroku上的
REDISCLOUD_URL环境变量配置正确,可通过heroku config命令查看 - 检查Redis Cloud实例的防火墙规则,确保Heroku应用的IP地址被允许访问
- 简化TLS配置:Redis Cloud通常只需开启
tls: true即可,不需要额外参数,试试改成:redis: { host: AppConfig.REDIS.HOST, port: AppConfig.REDIS.PORT, password: AppConfig.REDIS.PASSWORD, tls: true, } - 部分Redis Cloud实例不需要用户名,仅需密码验证,可尝试移除
username参数
内容的提问来源于stack exchange,提问作者Cory Swainston
相关产品推荐
相关产品推荐

