我正在构建一个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中没有解决。
非常感谢任何提示。
干杯,乔瓦尼
答案 0 :(得分:0)
您可以使用connection#close
完全停止连接并按需建立新连接。
但是,您仍需要在时检测以终止连接。
请问这背后的动机究竟是什么? HTTP / REST和消息队列本质上是不同的。基于HTTP请求发送消息是一回事;收到某个请求的消息肯定是我不会自愿去的地方。