Kue работник с помощью createClientFactory: можно использовать только команды подписчика

Я работаю над тем, чтобы мои рабочие по куе настроились и обнаружили что-то странное. Если я создаю свою очередь, используя стандартное соединение kue redis, все работает отлично:

var kue = require('kue')
    , redis = require('redis');

var q = kue.createQueue();

q.process('cypher', function(job, done){});

Рабочий запускается отлично. Однако, если я пытаюсь переопределить соединение Redis по умолчанию с одним из моих собственных, я получаю

Ошибка: соединение в режиме подписчика, могут использоваться только команды подписчика

когда выполнение достигает функции q.process ниже:

var kue = require('kue')
    , redis = require('redis');


var redisClient =   redis.createClient();

var q = kue.createQueue({
    redis: {
        createClientFactory: function(){

            return redisClient;
        }
    }
});

q.process('cypher', function(job, done){});

Это не имеет никакого смысла. Я подумал, что, может быть, я совершил классическую асинхронную ошибку, но даже в следующем я получил ту же ошибку. Есть идеи?

redisClient.on('connect', function () {
    console.log('gotten here!!!');
    var q = kue.createQueue({
        redis: {
            createClientFactory: function(){

                return redisClient;
            }
        }
    });

    q.process('cypher', function(job, done){});
});

1 ответ

Решение

Вы фактически не передаете нового клиента каждый раз, когда вызывается ваш фабричный метод. Возвращение экземпляра синглтона из createClientFactory заставляет kue использовать одно и то же соединение для команд и pub/sub, и это невозможно в режимах подключения redis

Другие вопросы по тегам