gpt4 book ai didi

javascript - Node.js amqplib 何时关闭连接

转载 作者:行者123 更新时间:2023-12-04 16:05:25 24 4
gpt4 key购买 nike

我正在使用 amqplib在我的 node.js 服务器中传输消息。我看到了一个来自 RabbitMQ official website 的例子:

var amqp = require('amqplib/callback_api');

amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
var msg = 'Hello World!';

ch.assertQueue(q, {durable: false});
// Note: on Node 6 Buffer.from(msg) should be used
ch.sendToQueue(q, new Buffer(msg));
console.log(" [x] Sent %s", msg);
});
setTimeout(function() { conn.close(); process.exit(0) }, 500);
});

在这种情况下,连接在超时函数中关闭。我不认为这是一种可持续的方式。但是, ch.sendToQueue没有回调函数允许我在发送消息后关闭连接。关闭连接有什么好处?

最佳答案

我正在使用 promise API,但过程是相同的。首先您需要调用channel.close()然后 connection.close() .
channel.sendToQueue()返回一个 bool 值。

  • 当它准备好接受更多消息时为真
  • 当您需要在发送更多消息之前等待 channel 上的 'drain' 事件时为 False。

  • 这是我使用 async/await 的代码:
      async sendMsg(msg) {
    const channel = await this.initChannel();

    const sendResult = channel.sendToQueue(this.queue, Buffer.from(msg), {
    persistent: true,
    });

    if (!sendResult) {
    await new Promise((resolve) => channel.once('drain', () => resolve));
    }
    }

    async close() {
    if (this.channel) await this.channel.close();
    await this.conn.close();
    }

    关于javascript - Node.js amqplib 何时关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698976/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com