如何停止从选择性队列中消费消息 - RabbitMQ - Javascript / node

时间:2017-03-29 12:02:59

标签: javascript node.js rabbitmq amqp

我正在构建一个REST-amqp示例,在该示例中,我从rabbitmq中的给定队列中获取消息,然后通过REST将消息发送回客户端。

我已经在node.js

的rabbitmq教程之后实现了代码
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://192.168.225.203:5672', function (err, conn) {
conn.createChannel(function (err, ch) {
    var q = 'aQueue';
    ch.assertQueue(q, { durable: false });
    var messages = [];
    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());
        messages.push(msg.content.toString());
        messages.forEach(function(element) {
            console.log(element);
        });
    }, { noAck: true });
});

});

我可以整合数组中的所有消息(消息),但是此函数会一直运行直到应用程序停止,这不是一件好事,因为REST客户端将永远等待.... 我想停止该功能,并在队列为空时继续执行该程序,或者如果第一个选项不可能,则在一段时间后继续(2secs)。 我发现在Java中解决了同样的问题,但在JS中没有解决。

非常感谢任何提示。

干杯,乔瓦尼

1 个答案:

答案 0 :(得分:0)

您可以使用connection#close完全停止连接并按需建立新连接。

但是,您仍需要在时检测以终止连接。

请问这背后的动机究竟是什么? HTTP / REST和消息队列本质上是不同的。基于HTTP请求发送消息是一回事;收到某个请求的消息肯定是我不会自愿去的地方。