我正在使用amqlib
模塊構建帶有rabbitmq和nodejs的後臺任務管理系統。我的服務器可能會被殺死(使用太多的CPU)。如果我啓動了很多這些任務,並且我只有幾個工作站,那麼我的服務器可能會被殺死(使用太多的CPU)。AMQPlib nodejs消費者任務併發
我想知道是否有辦法創建一個amqp隊列,以便我的消費者一次只能使用此隊列中的一個任務(即在確認或拒絕之前,請不要發送此類任務對這個消費者)。 或者我應該在代碼中自己處理這個問題(也許在我的工作人員中保留一個引用,我正在處理該隊列的任務,並在執行任務時拒絕此隊列的所有任務?)。
這裏是我的示例代碼:
我創造這樣的
const amqpConn = require('amqplib').connect('amqp://localhost');
我的隊列名稱的AMQP連接tasks
:
amqpConn.then((conn) => {
return conn.createChannel();
}).then((ch) => {
return ch.assertQueue('tasks').then((ok) => {
ch.sendToQueue(q, new Buffer(`something to do ${i}`));
});
}).catch(console.warn);
這裏是我的消費者(我猜測這是我應該做的工作,以限制此隊列中只有一個併發任務):
amqpConn.then((conn) => {
return conn.createChannel();
}).then((ch) => {
return ch.assertQueue('tasks').then((ok) => {
return ch.consume('tasks', (msg) => {
if (msg !== null) {
console.log(msg.content.toString());
ch.ack(msg);
}
});
});
}).catch(console.warn);
非常感謝!
自從我和RabbitMQ合作已經有一段時間了,但是看看[在此](http://www.squaremobius.net/amqp.node/channel_api.html#channel_prefetch)。 – robertklep