Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将队列使用的消息发送到express应用程序?_Node.js_Express_Amqp - Fatal编程技术网

Node.js 如何将队列使用的消息发送到express应用程序?

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

因此,我在express应用程序中有一个简单的get方法,它使用

在哪里:

以及相应的功能

其中ConsumerMessageFromQueue是:

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());
}