ZeroMQ - 消息框架



理解 ZeroMQ 中的消息

在 ZeroMQ 中,消息是一个离散的数据单元,在应用程序之间或同一应用程序的不同组件之间传递。从 ZeroMQ 的角度来看,消息被认为是不透明的二进制数据。

它们是使用 ZeroMQ 支持的各种消息模式通过网络发送和接收的数据块。ZeroMQ 提供以下几种消息模式:

  • 发布/订阅 (PUB/SUB)
  • 请求/应答 (REQ/REP)
  • 推/拉 (PUSH/PULL)
  • 路由器/处理程序 (Router/Dealer)

消息框架

ZeroMQ 消息库指的是在应用程序或服务之间交换的消息的结构和组织。消息框架提供了一种构建、发送和接收消息的方法,并确保消息被接收应用程序正确地格式化、路由和处理。

这是一个简单的示意图,演示了 ZeroMQ 如何构建消息框架:

Message framing

此处:

  • 套接字 (Socket): 套接字处理网络上的通信。它发送和接收消息并内部管理框架。
  • 队列 (Queue): 它表示 ZeroMQ 用于存储和管理消息及其框架的内部机制。它确保消息被正确处理,即使消息被拆分为多个框架。
  • 消息 (Message): 它是由一个或多个框架组成的逻辑数据单元。
  • 框架 (Frame): 构成消息的单个数据块。框架按顺序发送和接收,并由 ZeroMQ 重新组装成完整的消息。

消息如何被管理和构建?

在 ZeroMQ 中,信封、正文和框架的概念对于理解消息如何构建和管理非常重要。

  • 信封 (Envelope)
  • 正文 (Body)
  • 框架 (Frames)

信封 (Envelope)

在 ZeroMQ 中,术语“信封”通常用于 ROUTER 套接字的上下文中。信封通常包含元数据,例如路由信息,用于将消息路由到正确的接收者。它更常与 ROUTER 套接字相关联,其中信封包含消息路由标识和其他元数据。

正文 (Body)

ZeroMQ 中消息的正文是指正在发送的实际数据。这是应用程序处理的消息有效负载。正文是套接字之间传输的主要内容。

框架 (Frames)

当处理更复杂的套接字类型(如 STREAM 和 ROUTER)时,框架的概念就变得很重要。消息可以拆分为多个框架,每个框架都是一块数据,这些数据共同构成完整的消息。这对于处理大型消息或具有多个部分的消息很有用。

ZeroMQ 本身定义或实现特定类型的消息框架,如某些协议那样。相反,ZeroMQ 提供了一个灵活的消息系统,其中消息的框架和序列化由应用程序处理。但是,它提供了一些消息模式和套接字类型,这些模式和类型以不同的方式隐式地处理消息框架。它们是:

发布/订阅 (PUB/SUB)

  • 发布者 (PUB) - 将消息发送给多个订阅者。
  • 订阅者 (SUB) - 基于订阅过滤器接收消息。
  • 框架 - ZeroMQ 在内部处理框架,但消息按原样发布。

请求/应答 (REQ/REP)

  • 请求 (REQ) - 向应答套接字发送请求并等待响应。
  • 应答 (REP) - 接收请求并发送响应。
  • 框架 - ZeroMQ 将消息作为离散实体进行框架处理,保持请求和响应协议。

DEALER 和 ROUTER

  • 处理程序 (DEALER) - 充当非阻塞请求者,能够同时处理多个请求。
  • 路由器 (ROUTER) - 以更复杂的方式处理消息,根据标识或其他条件进行路由。
  • 框架 - 消息包含路由元数据或标识符,ZeroMQ 使用此元数据对消息进行框架处理以进行路由。

PUSH 和 PULL

  • 推送 (PUSH) - 将消息发送到拉取套接字,通常用于分发任务。
  • 拉取 (PULL) - 从推送套接字接收消息。
  • 框架 - 消息以轮询方式分发,ZeroMQ 在内部处理框架。

交付保证

ZeroMQ 不提供内置的消息传递保证,并且 ZeroMQ 中没有自动重试机制。如果发送消息但接收者不可用或网络发生故障,则消息可能会丢失。

广告