Bullmq не извлекает задание из Redis по протоколу TLS

#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,
...