gpt4 book ai didi

javascript - 如何使用 amqp 库重用 "setup structure"之外的 RabbitMQ 连接和 channel ?

转载 作者:行者123 更新时间:2023-12-01 01:08:14 25 4
gpt4 key购买 nike

我正在尝试使用 amqp 库构建一个简单的 node.js 客户端,该客户端打开单个连接,然后打开到 RabbitMQ 服务器的单个 channel 。我想重用相同的连接和 channel 来发送多条消息。主要问题是,我不想将整个代码编写在 ceateChannel() 函数的回调函数中。

如何在回调函数之外重用 channel 并确保回调函数在使用 channel 之前已完成?

我已经尝试了回调方式和 promise 方式,但我无法让它们工作。当使用回调方法时,我遇到了所描述的问题。

使用 Promise 时,我遇到的问题是无法在 .then() 函数之外保留连接和 channel 的引用,因为传递的变量在设置连接和 channel 后会被销毁。


amqp.connect('amqp://localhost', (err, conn) => {

if (err !== null) return console.warn(err);
console.log('Created connection!');

conn.createChannel((err, ch) => {

if (err !== null) return console.warn(err);
console.log('Created channel!');

//this is where I would need to write the code that uses the variable "ch"
//but I want to move the code outside of this structure, while making sure
//this callback completes before I try using "ch"

});
});


amqp.connect('amqp://localhost').then((conn) => {
return conn.createChannel();
}).then((ch) => {
this.channel = ch;
return ch.assertQueue('', {}).then((ok) => {
return this.queueName = ok.queue;
});
}).catch(console.warn);

最佳答案

为什么不使用async\await

const conn = await amqp.connect('amqp://localhost');
const ch = await conn.createChannel();
// after that you can use ch anywhere, don't forget to handle exceptions

此外,如果您使用 amqplib,请不要忘记处理 close 和内部 error 事件,例如如下所示:

conn.on('error', function (err) {
console.log('AMQP:Error:', err);
});
conn.on('close', () => {
console.log("AMQP:Closed");
});

关于javascript - 如何使用 amqp 库重用 "setup structure"之外的 RabbitMQ 连接和 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55417711/

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