我正在使用RabbitMQ来处理我项目中的一些工作。 目前,如果我发送5个工作,请说
Job1
Job2
Job3
Job4
Job5
所有作业都会传递到队列,但如果Job1需要5秒钟才能完成而Job2需要2秒才能完成,执行顺序就会变为 像
Job5
Job1 etc.,
我有没有办法让它能让所有这些工作在RabbitMQ接收器中完成前一个工作后完成(如Job1,Job2,Job3,Job4,Job5等执行流程)?
作业执行(根据Dave的要求)
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) {
//JOB HERE
}, {noAck: true});
});
return ok.then(function(_consumeOk) {
console.log(' [*] Waiting for messages. To exit press CTRL+C');
});
});
}).then(null, console.warn);
感谢, 巴兰
答案 0 :(得分:0)
我认为您将RabbitMQ服务器与应用程序逻辑混淆。简短的回答是,不能保证消息处理的顺序。
为了解决您的澄清问题,队列不关心您的应用程序如何从中获取。该队列仅向您的应用程序提供消息。由您决定如何处理(例如串行,并行等)。我认为,如果您计划进行串行处理,那么使用消息队列没有多大意义,因为您可以获得没有任何好处的消息服务器的所有缺点。也许您可以更多地描述您的应用程序?
有关其他详细信息,请参阅message order of delivery处的其他答案。