我正在使用amqplib节点模块并按照hello world发送/接收教程。
https://github.com/squaremo/amqp.node/tree/master/examples/tutorials
我的接收者/工作人员在后台接收该消息并执行CPU密集型任务,因此我一次只能处理大约5条消息。
控制接收方正在接受的消息数量的最佳方法是什么。
代码示例:
var amqp = require('amqplib');
amqp.connect('amqp://localhost').then(function(conn) {
process.once('SIGINT', function() { conn.close(); });
return conn.createChannel().then(function(ch) {
var ok = ch.assertQueue('hello', {durable: false});
ok = ok.then(function(_qok) {
return ch.consume('hello', function(msg) {
console.log(" [x] Received '%s'", msg.content.toString());
}, {noAck: true});
});
return ok.then(function(_consumeOk) {
console.log(' [*] Waiting for messages. To exit press CTRL+C');
});
});
}).then(null, console.warn);
答案 0 :(得分:1)
您需要在模型上设置服务质量。以下是在C#中如何做到这一点
var _model = rabbitConnection.CreateModel();
// Configure the Quality of service for the model. Below is how what each setting means.
// BasicQos(0="Dont send me a new message untill I’ve finshed", _fetchSize = "Send me N messages at a time", false ="Apply to this Model only")
_model.BasicQos(0, _fetchSize, false);
QOS适用于Ack流程。因此,在您收到消息之前,它一次只会向您发送N(_fetchSize)。我认为你必须在代码中设置noAck:false才能使其正常工作。
祝你好运!