redis 如何解决读取ECONNRESET布尔库错误

pgky5nke  于 2023-06-28  发布在  Redis
关注(0)|答案(3)|浏览(335)

我在node js中使用bull库排队时出错,错误是这样的:

Error: read ECONNRESET at TCP.onStreamRead 
    - - errno: -104,
   - - code: 'ECONNRESET',
   - - syscall: 'read'
   - - }

MaxRetriesPerRequestError: Reached the max retries per request limit (which is 20). Refer to "maxRetriesPerRequest" option for details.

这是我的代码:

const imageQueue = new Bull("imageQueue", process.env.REDIS_URL);
yqhsw0fo

yqhsw0fo1#

通过添加tls成功解决错误

const imageQueue = new Bull("imageQueue", process.env.REDIS_TLS_URL, {
  redis: { tls: { rejectUnauthorized: false } },
});
c3frrgcw

c3frrgcw2#

bull使用ioredis进行连接,并在Queue构造函数中允许第三个opts参数。根据源代码,它在这些选项中查找redis属性。
您可以尝试将重试限制提高到100。

const opts = {redis:{maxRetriesPerRequest:100}}
const imageQueue = new Bull("imageQueue", process.env.REDIS_URL, opts);

但是,同样,你可能会使用Heroku的redis服务比他们允许的免费层(如果这是你使用的)更密集。

tyu7yeag

tyu7yeag3#

你可以做一些类似于npm包文档中建议的事情。

// This is the default value of `retryStrategy`
  retryStrategy(times) {
    const delay = Math.min(times * 50, 2000);
    return delay;
  },
});

https://www.npmjs.com/package/ioredis#user-content-auto-reconnect
你需要在创建bull队列时发送这个redis配置。

相关问题