Node.js 中的 Pub/Sub

2025 年 3 月 1 日 | 阅读 4 分钟

Pub/Sub 简介

发布/订阅 (pub/sub) 通信范例中,发送者(发布者)不会直接将消息发送给特定的接收者(订阅者)。相反,它们会将消息发布到一个频道,订阅者会收到发布的通知。因此,通信模式变得更加灵活和可扩展。消息的创建和消费是分离的。这种方法在实时应用程序、微服务架构和分布式系统中非常有用。

Node.js 中的 Pub/Sub

由于 Node.js 的事件驱动、非阻塞 I/O 方法,Pub/Sub 范例非常适合 Node.js。Redis、MQTT 原生 Node.js 模块以及 RabbitMQ 和 Google Cloud Pub/Sub 等消息代理是使 Node.js 的 Pub/Sub 更易于使用的框架和技术。Node.js 的 EventEmitter 原生集成在 Node.js 框架中,通过 events 模块实现。它可以用来实现一个简单的 Pub/Sub 方法。这是一个简单的例子

输出

Pub/Sub in Node.js

说明

在这个例子中,有两个订阅者正在等待 "message" 事件的发生。发布者发送一个 "message" 事件,两个订阅者都会处理并接收到它。

Redis 发布/订阅 (Pub/Sub) 消息由内存数据结构存储 Redis 提供支持。由于其有效性和易用性,它是 Pub/Sub 部署的一个流行选择。

在 Node.js 中,如果没有 redis 包,则无法使用Redis Pub/Sub。使用 npm install redis 安装。Redis Pub/Sub 示例如下:const redis = require('redis');

输出

Pub/Sub in Node.js

在您的示例中,发布者将消息发送到订阅者正在监听的同一频道“my_channel”。收到消息后,订阅者会将其记录下来。

MQTT 发布/订阅

MQTT (Message Queuing Telemetry Transport) 是一种针对物联网和低带宽环境的轻量级消息协议。它为 Node.js 提供了许多实现,并且在 Pub/Sub 方面表现良好。

如果您想在 Node.js 中使用 MQTT,则需要 MQTT 包。

使用 npm 安装 MQTT

这是一个 MQTT 发布/订阅示例

输出

Pub/Sub in Node.js

说明

在此示例中,订阅者连接到 MQTT 代理并订阅 'my_topic'。发布者将消息发送到同一主题,订阅者接收并记录下来。

RabbitMQ 发布/订阅

RabbitMQ 是一个强大的消息代理,通过其交换器和队列模型支持发布/订阅。RabbitMQ 的灵活性和可靠性使其成为企业应用程序中实现发布/订阅的热门选择。

要在 Node.js 中使用 RabbitMQ,您需要 amqplib 包。

这是一个 RabbitMQ 发布/订阅示例

输出

订阅者启动并等待消息。它会记录它正在等待消息的队列名称。

Pub/Sub in Node.js

<unique_id> 将是 RabbitMQ 为临时队列生成的唯一标识符。

发布者发送消息并记录下来。

Pub/Sub in Node.js

不久之后,订阅者会收到消息并记录下来。

Pub/Sub in Node.js

在此实例中,消息由发布者发送到名为“logs”的交换器,消息由订阅者从该交换器接收。'fanout' 交换器类型确保消息能到达每个订阅者。

Google Cloud Pub/Sub

您可以使用 GoogleCloud Pub/Sub 来大规模部署 Pub/Sub。这是一种完全托管的消息服务,旨在优先考虑全球分发和可靠性。

要使用 Node.js 中的 Google Cloud Pub/Sub,需要 @google-cloud/pubsub 包。

这是一个 Google Cloud Pub/Sub 示例

输出

Pub/Sub in Node.js

说明

在此实例中,订阅者侦听一个主题上的订阅,发布者已向该主题发送了一条消息。一旦消息发布,订阅者就会收到并处理它。