如何获取当前排队的消息数?
我的代码基本上如下:
function readQueue() {
var open = require('amqplib').connect(config.rabbitServer);
open.then(function (conn) {
var ok = conn.createChannel();
ok = ok.then(function (ch) {
ch.prefetch(config.bulkSize);
setInterval(function () {
handleMessages();
}, config.bulkInterval);
ch.assertQueue(config.inputQueue);
ch.consume(config.inputQueue, function (msg) {
if (msg !== null) {
pendingMessages.push(msg);
}
});
});
return ok;
}).then(null, console.warn);
}
Run Code Online (Sandbox Code Playgroud)
我在文档中或调试时没有发现任何内容,并且我确实看到了允许此操作的不同库,因此想知道 amqplib 是否也支持此操作。
小智 5
您可以使用 amqplib 获取队列长度。
就我而言,队列具有“durable:true”功能。您必须将其作为选项传递。
var amqp = require('amqplib/callback_api');
amqp.connect(amqp_url, function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'task2_queue';
ch.assertQueue(q, {durable: true}, function(err, ok) {
console.log(ok);
});
});
});
Run Code Online (Sandbox Code Playgroud)
它将返回一个像这样的对象:
{ queue: 'task2_queue', messageCount: 34, consumerCount: 2 }
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息:https ://www.squaremobius.net/amqp.node/channel_api.html#channel_assertQueue
我认为assertQueue方法调用将返回一个包含当前消息计数的对象。我不记得确切的属性名称,但它应该在那里。
但真正的技巧是,一旦调用assertQueue,这个数字就永远不会更新。获取更新的消息计数的唯一方法是再次调用assertQueue。如果您检查得太频繁,这可能会对性能产生一些影响。
| 归档时间: |
|
| 查看次数: |
10160 次 |
| 最近记录: |