游乐游手机版
首页/编程语言/文章详情

Node.js在Ubuntu上如何进行消息队列处理

时间:2026-05-03 07:10
在Ubuntu上使用Node js进行消息队列处理 想在Ubuntu上玩转消息队列?Node js生态提供了不少选择,比如RabbitMQ、Apache Kafka,还有Redis。今天,咱们就以RabbitMQ为例,手把手带你走一遍从安装到跑通第一个“Hello World”消息的全过程。 1

在Ubuntu上使用Node.js进行消息队列处理

想在Ubuntu上玩转消息队列?Node.js生态提供了不少选择,比如RabbitMQ、Apache Kafka,还有Redis。今天,咱们就以RabbitMQ为例,手把手带你走一遍从安装到跑通第一个“Hello World”消息的全过程。

Node.js在Ubuntu上如何进行消息队列处理

1. 安装RabbitMQ

第一步,得先把RabbitMQ请到你的Ubuntu系统里。打开终端,执行下面这组命令就行:

sudo apt update
sudo apt install rabbitmq-server

安装完成后,别急着下一步,先把服务启动起来:

sudo systemctl start rabbitmq-server

怎么确认它真的在跑呢?检查一下服务状态是最稳妥的办法:

sudo systemctl status rabbitmq-server

2. 安装Node.js和npm

消息队列的“地基”打好了,接下来该准备Node.js环境了。如果你的系统里还没有,用下面这串命令安装Node.js和它的包管理器npm,非常方便:

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs

3. 创建Node.js项目

环境齐备,是时候创建一个专属的项目目录了。这就像给你的代码安个家:

mkdir my-rabbitmq-project
cd my-rabbitmq-project

进入项目目录后,初始化一个新的Node.js项目。加上-y参数,可以跳过那些交互式问答,快速生成package.json文件:

npm init -y

4. 安装RabbitMQ客户端库

Node.js要和RabbitMQ对话,需要一个“翻译官”,也就是客户端库。在Node.js生态里,amqplib是这个角色的不二之选。安装它只需要一行命令:

npm install amqplib

5. 编写消息生产者代码

现在进入实战环节。我们先来创建消息的“发送方”,也就是生产者。创建一个名为producer.js的文件,把下面的代码放进去:

const amqp = require('amqplib');

async function sendMessage() {
    try {
        const connection = await amqp.connect('amqp://localhost');
        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 ${message}`);

        setTimeout(() => {
            channel.close();
            connection.close();
        }, 500);
    } catch (error) {
        console.error(error);
    }
}

sendMessage();

这段代码干了啥?简单说,就是连接到本地的RabbitMQ服务,声明一个叫“hello”的队列,然后往里面塞一条“Hello World!”消息。发送成功后,它会在控制台告诉你,然后优雅地关闭连接。

6. 编写消息消费者代码

有发就得有收。接下来创建消息的“接收方”,也就是消费者。再新建一个consumer.js文件,内容如下:

const amqp = require('amqplib');

async function receiveMessage() {
    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 ${queue}. To exit press CTRL+C`);

        channel.consume(queue, (msg) => {
            console.log(` [x] Received ${msg.content.toString()}`);
            channel.ack(msg);
        });
    } catch (error) {
        console.error(error);
    }
}

receiveMessage();

消费者做的事情正好相反:它同样连接到“hello”队列,然后就开始耐心等待。一旦有消息进来,它就会抓取出来,把内容打印在控制台上,并确认消息已处理。

7. 运行生产者和消费者

最激动人心的时刻到了——让整个流程跑起来。你需要打开两个终端窗口。

在第一个终端里,运行生产者脚本:

node producer.js

很快,你会看到它打印出 [x] Sent Hello World! 的发送成功提示。

紧接着,在第二个终端里,启动消费者脚本:

node consumer.js

如果一切顺利,这个终端窗口会立刻显示出 [x] Received Hello World!。瞧,消息已经从生产者那里,穿越队列,稳稳地送到了消费者手中。

总结

到这里,一个在Ubuntu上使用Node.js和RabbitMQ的基础消息队列处理流程就完整实现了。别看这只是个简单的“Hello World”,它已经包含了连接、通道、队列声明、发送和接收这些核心概念。基于这个骨架,你可以轻松地扩展出更多的生产者和消费者,或者引入更复杂的路由、确认机制和错误处理逻辑,来应对真实的业务场景。消息队列的世界大门,已经向你打开了。

来源:https://www.yisu.com/ask/51301167.html
上一篇Ubuntu Node.js如何实现API接口开发 下一篇ubuntu防火墙与其他安全工具对比
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
如何在Go中安全地创建和使用time.Ticker最佳实践指南
编程语言 · 2026-07-06

如何在Go中安全地创建和使用time.Ticker最佳实践指南

在Go中,time Ticker的创建位置直接影响并发安全。最佳实践是在goroutine外创建或完全限定在单个goroutine内使用,严禁无保护跨goroutine共享。无论采用哪种方式,都必须在使用完毕后调用Stop()释放底层定时器资源,防止goroutine泄露。停止后的Ticker不应再调用Reset以避免竞态。

Go跨文件cgo结构体类型不兼容的解决方案
编程语言 · 2026-07-06

Go跨文件cgo结构体类型不兼容的解决方案

cgo为每个Go包生成独立的C命名空间,导致跨文件使用同一C结构体时类型不兼容。解决方案是在中心包中定义Go封装类型(如typePointC point_t),并将所有构造、访问和业务逻辑封装其中,其他包仅引用Go类型,避免直接暴露C类型。

Go语言有符号整数二进制补码的正确输出方法
编程语言 · 2026-07-06

Go语言有符号整数二进制补码的正确输出方法

Go语言fmt Printf的%b格式对负数输出带负号的绝对值二进制,而非底层补码位模式。需注意,通过将相同位宽的有符号整数转换为无符号类型(例如将int8转为uint8),可获取真实的二进制补码比特序列,如-5输出11111011,即其补码。

Python列表按出现顺序批量替换重复字符串
编程语言 · 2026-07-06

Python列表按出现顺序批量替换重复字符串

Python列表遍历中,使用计数器对重复字符串(如“latest png”)按出现顺序依次替换为带递增编号的新字符串(如“latest1 png”),保持原列表不变。该方法时间复杂度O(n),无需额外库,严格匹配避免误改,不修改原始列表。

Go语言中如何正确读取io.Reader避免重复与内存污染
编程语言 · 2026-07-06

Go语言中如何正确读取io.Reader避免重复与内存污染

Go开发者使用io Reader Read()手动读取HTTP响应体时,因忽略实际读取字节数n和未正确处理io EOF,导致内容重复、空字节污染等问题。必须使用buf[:n]追加有效数据,将io EOF视为正常终止信号,并检查其他错误,从而避免内存污染与panic风险。