#node.js #typescript #ssl #redis #bullmq
Вопрос:
Я использую очень простой пример ( const queue = new Queue('Paint')
) из https://www.npmjs.com/package/bullmq страница — все работает нормально (по умолчанию localhost:6379
).
Однако, когда я добавляю соединение ( new Queue('Paint', { connection })
), основанное на доступе TLS к Redis ( rediss://...
), я все равно могу помещать задания в очередь (что я вижу в самом Redis), но ни одно из этих заданий не выполняется работником.
Может быть, я упускаю какой-то скрытый флаг?
Спасибо!
-Дрор
Ответ №1:
Я узнал, что произошло, хотя до сих пор не знаю почему:
Я использовал ioredis в качестве соединения для bull, когда возникла проблема. Когда я заменил его на redis, он начал работать должным образом, вытаскивая задания из очереди.
Оба пакета имеют полную поддержку Redis по протоколу TLS, но по какой-то причине интеграция с bull не сработала для ioredis.
-Дрор
Ответ №2:
Это происходит из-за ручного и неполного анализа URL-адреса redis здесь: https://github.com/OptimalBits/bull/blob/develop/lib/queue.js#L308
rediss:// vs redis:// просто не принимается во внимание.
Чтобы обойти эту проблему, мне пришлось добавить больше ключей к дополнительному ключу «redis»:
export const REDIS_CONNECTION: Redis.RedisOptions = {
...(REDIS_URL.startsWith('rediss://') ? { tls: {} } : null), // This trick makes sure SSL would work
retryStrategy: (times) => {
// reconnect after
return Math.min(times * 50, 2000);
},
};
export const queue = new Bull<JobData>('foobar', REDIS_URL, {
redis: REDIS_CONNECTION,
...