NestJS、Bull Queue 和 Redis 投入生产

问题描述 投票:0回答:1

我有一个使用 NestJS 版本 9.2.0 和 Bull Queue 版本 4.9.0 的项目,它连接到 Redis 来安排作业。

在本地,这按预期工作,但是,当部署到暂存时,Bull 将无法连接,并且失败并出现错误

maxRetriesPerRequest

我的假设是,在登台时 Bull 无法通过 TLS 连接进行连接,但是我无法确认这确实是问题所在。

我尝试了以下方法但没有成功:

  1. 将 Redis url 设置为
    rediss://.....
  2. 在Redis url末尾传递参数
    ?tls=true
  3. 传递一个空的
    tls: {}
    对象作为 Redis 配置的一部分,然后在我导入为
    BullModule
    文件中用作工厂的
    app.module
    中使用该对象。
我怀疑是与TLS连接相关的问题的原因:

    本地连接工作正常
  1. 当我在本地设置一个无效的 URL 来模拟 Bull 无法连接到 Redis 的场景时,我在控制台中遇到了与登台和生产中发生的情况相同的行为
  2. 我确保登台和生产中的 Redis 实例已启动并运行,并且我在应用程序中使用的 url 是正确的
redis nestjs tls1.2 bull
1个回答
0
投票
我在生产环境中也遇到了同样的问题,我的问题是 bullModule 设置。

我的 app.module.ts 就像:

BullModule.registerQueue( { name: 'a', redis: { host: process.env.REDIS_HOST, port: Number(process.env.REDIS_PORT), }, }, { name: 'b', redis: { host: process.env.REDIS_HOST, port: Number(process.env.REDIS_PORT), }, }, ),
我把它修好了:

BullModule.forRoot({ redis: { host: process.env.REDIS_HOST, port: Number(process.env.REDIS_PORT), }, }), BullModule.registerQueue( { name: 'a', }, { name: 'b', }, ),
以这种方式修复代码后,它工作得很好。 (您也可以关注

nest.js文档。)

© www.soinside.com 2019 - 2024. All rights reserved.