RabbitMQ 使用 Node.js 创建 worker

202 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情

第一步是安装 RabbitMQ,如上所述,我将在 Docker 容器中使用 RabbitMQ。如果您还没有这个环境,我建议您阅读我上面给出的第二个链接,我在其中演示了如何创建这个环境。

项目创建

在您的计算机上打开一个终端,然后选择一个位置来创建您的项目。通过终端导航到它并运行以下命令:

npm init -y

此命令将通过创建一个名为 package.json 的文件来初始化您的项目。现在让我们下载 RabbitMQ 包。为此,请在您的终端中运行以下命令:

npm install amqplib --save

创建项目并导入amqplib库后,让我们在项目中创建两个新文件。

第一个是我们的应用程序文件,在本文中我将其称为app.js。在项目的根目录下创建它,然后使用下面的代码片段更新它:

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

amqp.connect('amqp://localhost:5672', function (err, conn) {
    conn.createChannel(function (err, ch) {
        var q = 'hello';
        var msg = 'Hello World 123!';
        ch.assertQueue(q, { durable: false });     
        ch.sendToQueue(q, new Buffer(msg));
        console.log(" [x] Sent %s", msg);
    });
    setTimeout(function () { conn.close(); process.exit(0) }, 500);
});

分析上面的代码你有:

  • 1:从amqplib库导入
  • 3:与RabbitMQ的连接
  • 4:创建新频道
  • 5:频道名称
  • 6:要发送的默认消息
  • 7:将队列名称传递给 RabbitMQ 连接
  • 8:RabbitMQ 与 Buffer 一起工作,我将消息传递给它,它应该发送到哪个队列

现在让我们创建我们的工人。为此,请在项目的根目录下创建一个名为 worker.js 的新文件,并使用以下代码片段对其进行更新:

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

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

        ch.assertQueue(q, { durable: false });
        ch.prefetch(1);
        console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
        ch.consume(q, function (msg) {
            console.log(" [x] Received %s", msg.content.toString());
        }, { noAck: true });
    });
});

分析这段代码你有:

  • 1 到 7:与 app.js 中的设置相同
  • 10 到 12:监听第 5 行中提到的队列并对其进行处理

测试代码

现在要测试我们的代码,请在您的计算机上打开 3 个终端,导航到您的项目并按照以下步骤操作: 终端一:

node worker.js

终端二

node worker.js

终端三: 运行下面的命令来创建您的应用程序并将第一条消息发送到您的队列。

注意:RabbitMQ 使用 Round Robin 概念,因此终端一可能不是第一个使用队列的人

node app.js