Node.js 如何将队列使用的消息发送到express应用程序?
因此,我在express应用程序中有一个简单的get方法,它使用 在哪里: 以及相应的功能 其中ConsumerMessageFromQueue是:Node.js 如何将队列使用的消息发送到express应用程序?,node.js,express,amqp,Node.js,Express,Amqp,因此,我在express应用程序中有一个简单的get方法,它使用 在哪里: 以及相应的功能 其中ConsumerMessageFromQueue是: function consumeMessageFromQueue(msg) { console.log(" [+] Received '%s'", msg.content.toString()); } 如何从app.get函数中的consumeMessageFromQueue函数而不是硬编码的“messageReceivedFromQu
function consumeMessageFromQueue(msg) {
console.log(" [+] Received '%s'", msg.content.toString());
}
如何从app.get函数中的consumeMessageFromQueue函数而不是硬编码的“messageReceivedFromQueue”字符串发送消息?为了澄清,您是否希望在consumeMessageFromQueue函数中使用
res.send
,并将msg
参数传递给它?是,这将是一种方法。(另一种方法是从consumeMessageFromQueue
函数中以某种方式获取msg
,并将其传递给app.get
函数)队列的要点是事情是异步发生的,这意味着您可以在队列中的任何内容被消费和处理之前回复客户端。感觉就像你在尝试某种反模式。也就是说你可以用闭包来做,尽管我建议你不要这样做!您认为使用两种不同的app
方法会更好吗?(一个用于发送消息,另一个用于消费消息)通常,您会创建一个端点来执行某些操作(例如创建社交媒体帖子)。这将把post附加到一个队列上,并向客户机返回200OK。队列可以自由处理,不管它喜欢什么,然后以任何速度处理。在任何时候,用户都可以请求不同的端点,而无需等待队列处理。在我们的社交媒体实例中,如果他们请求他们的时间线,状态可能不会立即显示,因为它可能尚未被处理。这就取决于你的消费工人的规模。
function sendMessageToQueue(msg, q) {
amqp.connect('amqp://localhost').then(function(conn) {
return conn.createChannel().then(function(ch) {
var ok = ch.assertQueue(q, {durable: false});
return ok.then(function(_qok) {
ch.sendToQueue(q, Buffer.from(msg));
console.log(" [-] Sent '%s' to", msg, q);
return ch.close();
});
}).finally(function() { conn.close();});
}).catch(console.warn);
}
amqp.connect('amqp://localhost').then(function(conn) {
process.once('SIGINT', function() { conn.close(); });
return conn.createChannel().then(function(ch) {
var q = 'consumerQueue';
var ok = ch.assertQueue(q, {durable: false});
ok = ok.then(function(_qok) {
return ch.consume(q, consumeMessageFromQueue, {noAck: true});
});
return ok.then(function(_consumeOk) {
console.log(' [*] Waiting for messages. To exit press CTRL+C');
});
});
}).catch(console.warn);
function consumeMessageFromQueue(msg) {
console.log(" [+] Received '%s'", msg.content.toString());
}