我有一个应用程序,在该应用程序中,每次消费消息时,我都需要查询MySQL数据库以获取一些信息,并基于此来处理消费的消息。我希望对此进行优化,以防止对数据库的多个查询增加负载。
我正在考虑一种方法,即我至少等待x消息或y 。通过这种方式,我可以批量消费一些消息,即使在某个时候我收到的消息更少,它们也会被消费。
示例:假设x = 100,y = 10秒
这意味着我至少要等待100条消息或10秒,以最先收到的为准。这样,我可以在一次查询中一次查询数据库中的100条消息。此外,如果我收到的消息少于100条,则剩余的消息将在最多10秒的窗口中处理。
我正在使用带有amqplib
的NodeJS进行消费。我有以下基于RabbitMQ示例的代码:
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
ch.assertQueue(q, {durable: false});
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
ch.consume(q, function(msg) {
console.log(" [x] Received %s", msg.content.toString());
}, {noAck: true});
});
});
我在考虑在每个consume
回调中添加一个全局对象,并在该对象到达x messages时检查该对象的计数。尽管如此,我仍然不确定如何添加y seconds的时间上限,并确保如果我在时间窗口内收到的消息少于x ,则会处理这些消息
https://stackoverflow.com/questions/53800747
复制相似问题