我正在開發一個偵聽消息隊列(ActiveMQ)的node.js組件,並將收到的消息分批添加到redis(每批必須爲20個) 。Node.js應用程序偵聽消息隊列並將消息異步添加到redis
從ActiveMQ接收的消息數量爲每秒10個或更少時沒有問題。
我的問題是消息每4毫秒添加到隊列中。這會導致添加到批次的記錄數有時會超過每批20個。
const stompit = require('stompit');
var uuid = require('node-uuid');
var Redis = require('ioredis');
var redis = new Redis();
var pipeline = redis.pipeline();
var batchCounter = 0;
stompit.connect({ host: 'localhost', port: 61613 }, function(err1, client) {
client.subscribe({ destination: 'MyQueue' }, function(err2, msg) {
msg.readString('UTF-8', function(err3, body) {
if (batchCounter >= 20){
pipeline.exec(function(err4, results) {
pipeline = redis.pipeline();
batchCounter = 0;
console.log(results);
});
}
batchCounter++;
pipeline.set(uuid.v1(), JSON.stringify(body));
//client.disconnect();
});
});
});
如何解決這個問題? 謝謝
它仍然是可能的,你可以用多條管道會在同一時間Redis的結束。如果這也會導致問題,您可能需要一個fullpipelines隊列來處理。 – Matt