返回

极简发布/订阅模式:同步通信的基石

前端

在软件架构中,发布/订阅模式是一种消息范式,用于建立发布者和订阅者之间的同步通信。与传统的请求/响应模型不同,发布/订阅模式允许发布者向订阅者发送消息,而无需了解谁在监听。

发布/订阅模式的基础

发布/订阅模式包含以下关键元素:

  • 发布者: 产生消息并将其发布到特定主题的组件。
  • 订阅者: 对特定主题感兴趣并接收与该主题相关消息的组件。
  • 主题: 用于对消息进行分类并将其路由到适当订阅者的逻辑通道。
  • 消息队列: 存储发布消息的临时存储区,直到订阅者可以处理它们。

实现一个极简发布/订阅模式

让我们通过一个简单的 Python 实现来了解发布/订阅模式的基本原理:

import asyncio
import time

# 定义主题
TOPIC = "my_topic"

# 定义消息队列
message_queue = asyncio.Queue()

# 定义发布者
async def publisher():
    while True:
        message = input("Enter message to publish: ")
        await message_queue.put(message)
        print(f"Published message: {message}")
        time.sleep(1)

# 定义订阅者
async def subscriber():
    while True:
        message = await message_queue.get()
        print(f"Received message: {message}")

# 创建任务
publisher_task = asyncio.create_task(publisher())
subscriber_task = asyncio.create_task(subscriber())

# 运行事件循环
asyncio.run(publisher_task)
asyncio.run(subscriber_task)

如何运作

  1. 发布者 不断从用户接收消息并将其发布到 TOPIC
  2. 消息队列 充当消息缓冲区,存储发布的消息。
  3. 订阅者 持续轮询消息队列,获取任何新消息。
  4. 当订阅者收到消息时,它将其打印到控制台。

这个极简实现演示了发布/订阅模式的核心机制,包括消息发布、消息队列和订阅者监听主题。

发布/订阅模式的优点

发布/订阅模式提供以下优点:

  • 解耦: 发布者和订阅者之间没有任何直接联系,从而提高了模块化和可扩展性。
  • 可扩展性: 可以轻松添加或删除发布者和订阅者,而不影响系统的整体行为。
  • 弹性: 如果订阅者暂时不可用,消息将被存储在消息队列中,等待稍后处理。
  • 事件驱动: 发布/订阅模式基于事件,允许系统对外部事件做出反应,从而提高响应能力。