Nodejs AMQP协议客户端amqplib的使用

Nodejs AMQP协议客户端amqplib的使用
AMQP(Advanced Message Queuing Protocol)是一种开放标准的应用层协议,用于应用程序之间传递消息。amqplib 是一个用于 Node.js 的 AMQP 0-9-1 协议的库,它提供了连接到 AMQP 服务器并进行消息收发的功能。

下面是一个简单的示例,展示如何使用 amqplib 创建一个连接,发送和接收消息。

安装

首先,你需要安装 amqplib

npm install amqplib

发送消息

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

// 连接到 RabbitMQ 服务器
amqp.connect('amqp://localhost', (err, conn) => {
    if (err) {
        console.error('[AMQP]', err.message);
        return;
    }
    // 当连接建立后,创建一个通道
    conn.createChannel((err, ch) => {
        if (err) {
            console.error('[AMQP] Cannot create channel', err.message);
            return;
        }

        // 定义队列名称
        const queue = 'hello';

        // 确保队列存在
        ch.assertQueue(queue, { durable: false });

        // 发送消息到队列
        ch.sendToQueue(queue, Buffer.from('Hello World!'));
        console.log(" [x] Sent 'Hello World!'");

        setTimeout(() => {
            // 关闭连接
            conn.close();
            process.exit(0);
        }, 500);
    });
});

接收消息

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

amqp.connect('amqp://localhost', (err, conn) => {
    if (err) {
        console.error('[AMQP]', err.message);
        return;
    }
    conn.createChannel((err, ch) => {
        if (err) {
            console.error('[AMQP] Cannot create channel', err.message);
            return;
        }

        const queue = 'hello';

        ch.assertQueue(queue, { durable: false });
        console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue);

        // 设置消费者,处理接收到的消息
        ch.consume(queue, (msg) => {
            if (msg !== null) {
                console.log(" [x] Received %s", msg.content.toString());
            }
        }, { noAck: true });
    });
});

说明

  • 在上述代码中,我们首先连接到 RabbitMQ 服务器,并在连接成功后创建一个通道。
  • 我们定义了一个名为 hello 的队列,并确保该队列存在。
  • 对于发送消息,我们调用 ch.sendToQueue 方法将消息发送到队列。
  • 对于接收消息,我们通过 ch.consume 方法监听队列,当有消息到达时,会执行回调函数来处理这些消息。

这个例子展示了如何使用 amqplib 库发送和接收简单的文本消息。你可以根据实际需求调整队列名、消息内容等参数。


3 回复

当然,让我们用点幽默来聊聊AMQP和Node.js中的amqplib

想象一下,你是一位魔术师,而AMQP就是你的魔法棒。amqplib就是让你这根魔法棒施展魔法的咒语。

首先,你需要安装这个魔法棒(库),就像这样:

npm install amqplib

然后,你开始施展连接到兔子洞(RabbitMQ服务器)的咒语:

const amqp = require('amqplib');

async function connect() {
    try {
        let connection = await amqp.connect('amqp://localhost');
        console.log("成功进入兔子洞!");
        return connection;
    } catch (error) {
        console.error("连接失败,可能是兔子洞堵了...", error);
    }
}

接着,你想要发送一个魔法信息(消息)给其他魔法师:

async function sendMessage(connection, message) {
    const channel = await connection.createChannel();
    await channel.assertQueue('魔法队列');
    channel.sendToQueue('魔法队列', Buffer.from(message));
    console.log(`发送了魔法:“${message}”`);
}

最后,接收消息就像是等待兔子跳出来一样:

connection.createChannel().then(channel => {
    channel.assertQueue('魔法队列', { durable: false });
    channel.consume('魔法队列', message => {
        if (message !== null) {
            console.log(`接收到魔法:“${message.content.toString()}”`);
            channel.ack(message);
        }
    });
});

希望这段代码能让你的Node.js之旅充满魔法!


AMQP(Advanced Message Queuing Protocol)是一种开放标准的应用层协议,用于应用程序之间通过消息传递进行通信。amqplib 是一个用于 Node.js 的 AMQP 1.0 客户端库。下面是一个简单的示例,展示如何使用 amqplib 创建一个基本的 AMQP 客户端。

首先,确保你已经安装了 amqplib 库。你可以使用 npm 来安装:

npm install amqplib

然后,你可以创建一个简单的脚本来连接到 RabbitMQ 服务器并发送和接收消息。

发送消息

const amqp = require('amqplib');

async function send() {
    try {
        const connection = await amqp.connect('amqp://localhost'); // 连接到本地RabbitMQ服务器
        const channel = await connection.createChannel();
        
        const queue = 'hello';
        await channel.assertQueue(queue, { durable: false }); // 声明队列
        
        const message = 'Hello World!';
        channel.sendToQueue(queue, Buffer.from(message)); // 发送消息到队列
        console.log(" [x] Sent %s", message);
        
        setTimeout(() => {
            connection.close();
            process.exit(0);
        }, 500);
    } catch (error) {
        console.error(error);
    }
}

send();

接收消息

const amqp = require('amqplib');

async function receive() {
    try {
        const connection = await amqp.connect('amqp://localhost');
        const channel = await connection.createChannel();

        const queue = 'hello';
        await channel.assertQueue(queue, { durable: false });

        console.log(' [*] Waiting for messages in %s. To exit press CTRL+C', queue);

        channel.consume(queue, (msg) => {
            if (msg !== null) {
                console.log(" [x] Received %s", msg.content.toString());
                channel.ack(msg); // 确认消息已经被处理
            }
        });
    } catch (error) {
        console.error(error);
    }
}

receive();

上述代码中:

  • amqp.connect 用来建立与 RabbitMQ 服务器的连接。
  • connection.createChannel() 创建一个信道,所有关于队列的操作都将在该信道上执行。
  • channel.assertQueue 用来声明或检查队列的存在。
  • channel.sendToQueue 用来将消息发送到指定队列。
  • channel.consume 用来消费指定队列的消息,并可以指定一个回调函数来处理这些消息。

请根据你的实际需求调整这些代码,比如连接参数、队列名等。希望这可以帮助你开始使用 amqplib

amqplib 是一个用于 Node.js 的 AMQP 协议实现库。首先,安装库:npm install amqplib。创建连接:require('amqplib').connect('amqp://localhost')。发送消息示例:

connection.createChannel().then(channel => {
  const q = 'hello';
  const msg = 'Hello World!';
  channel.assertQueue(q, { durable: false });
  channel.sendToQueue(q, Buffer.from(msg));
  console.log(" [x] Sent %s", msg);
});

接收消息类似地先创建通道,然后绑定队列监听消息。

回到顶部