メッセージキュー(ActiveMQ)をリッスンし、受信したメッセージをバッチでレディに追加するnode.jsコンポーネントを開発中です(バッチごとに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のために行くの複数のパイプラインで終わる可能性がまだ可能です。それでも問題が発生する場合は、処理するフルパイプのキューが必要な場合があります。 – Matt