node.js Невозможно разрешить суперкласс Consumer [unknown-superclass] - PullRequest
0 голосов
/ 10 июля 2019

Моя задача - добавить все запросы, поступающие на обслуживание, в очередь Redis и обрабатывать запросы по очереди из очереди.Для этого я использую библиотеку node.js redis-smq .Я могу добавить сообщения в очередь, но не могу использовать сообщения из очереди.Мой сервер Redis работает на локальном хосте через порт 6379

Вот мой код project1 index.js:

const express=require('express');
const app=express();
const bodyParser=require('body-parser');
const router=express.Router();
const { Message, Producer } = require('redis-smq');
const host = "localhost";
const config = {
    namespace: 'test-queue',
    redis: {
        host: '127.0.0.1',
        port: 6379,
        connect_timeout: 3600000,
    },
    log: {
        enabled: 0,
        options: {
            level: 'trace',
        },
    },
    monitor: {
        enabled: true,
        host: '127.0.0.1',
        port: 3000,
    },
};
app.listen(5000, ()=> {
    console.log('Server is listening at port 5000');
})

app.use((req,res,next)=>{
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, 
    Content-Type, Accept");
    next();
})
app.post('/queue/test', (req,res,next) => {
    try {
        const message = new Message();
        message
        .setBody({hello: 'world'})
        .setTTL(3600000)
        .setScheduledDelay(10);

        const producer = new Producer('test_queue', config);
        producer.produceMessage(message, (err) => {
            if(err) {
                console.log('Error while producing the message:', err);
                res.status(err.status || 501).send('Error while producing the message:',err);
            }
            else {
                console.log('Successfully produced the message');
                res.status(200).send('Successfully produced the message');
            }
        });
    }
    catch(err) {
        console.log('Error while connecting to redis:', err);
        res.status(err.status || 501).send('Error while connecting to 
            redis:',err);
    }
});
module.exports= app;

Но я не могу понять, как подписаться на эту очередь для использования сообщенийв node.js.Согласно документации мой потребительский класс выглядит следующим образом, который находится в проекте 2:

// filename:test-queue-consumer-launch.js

const {Consumer} = require('redis-smq');
const config = require('./redisConfig.js');

// const Consumer = redisSMQ.Consumer;

class TestQueueConsumer extends Consumer {
    /**
     *
     * @param message
     * @param cb
     */
    consume(message, cb) {
         console.log('Got a message to consume:', message);
        //  
        //  throw new Error('TEST!');
        //  
        //  cb(new Error('TEST!'));
        //  
        //  const timeout = parseInt(Math.random() * 100);
        //  setTimeout(() => {
        //      cb();
        //  }, timeout);
        cb();
    }
}

TestQueueConsumer.queueName = 'test_queue';
let options={
    messageConsumeTimeout: 300000,
    messageTTL: 500000000,
    messageRetryThreshold: 3,
    messageRetryDelay: 0
}
const consumer = new TestQueueConsumer(config,options);
consumer.run();

Когда я запускаю командный узел ./test-queue-consumer-launch.js получаю следующую ошибку:

consumer.js
[Polymer-ide] Unable to resolve superclass EventEmitter [Unknown superclass]
test-queue-consumer-launch.js
[Polymer-ide] Unable to resolve superclass Consumer [Unknown superclass]
...