ZeroMQ - 消息框架
了解 ZeroMQ 中的消息
ZeroMQ 中的 消息 是在应用程序或同一应用程序的组件之间传递的离散数据单元。从 ZeroMQ 的角度来看,消息被视为不透明的二进制数据。
它们是使用 ZeroMQ 支持的各种消息模式通过网络发送和接收的数据块。ZeroMQ 提供以下几种消息模式 −
- PUB/SUB(发布/订阅)
- REQ/REP(请求/回复)
- PUSH/PULL
- 路由器/经销商
消息框架
ZeroMQ 消息传递库是指在应用程序或服务之间交换的消息的结构和组织。消息传递框架提供了一种构造、发送和接收消息的方法,并确保接收应用程序正确格式化、路由和处理消息。
下面是一个简单的图表,演示了 ZeroMQ 如何构建消息 −
这里,
- Socket:Socket 处理网络上的通信。它发送和接收消息并在内部管理构建。
- 队列:它表示 ZeroMQ 用于存储和管理消息及其框架的内部机制。它确保消息得到正确处理,即使被拆分成多个帧。
- 消息:它是由一个或多个帧组成的逻辑数据单元。
- 帧:组成消息的各个数据块。帧按顺序发送和接收,并由 ZeroMQ 重新组装成完整的消息。
如何管理和构造消息?
在 ZeroMQ 中,信封、主体和帧的概念对于理解消息的构造和管理方式非常重要:
- 信封
- 主体
- 帧
信封
在 ZeroMQ 中,术语信封通常在 ROUTER 套接字的上下文中使用。信封通常包括元数据(例如路由信息),用于将消息路由到正确的接收方。它通常与 ROUTER 套接字相关联,其中信封由消息路由标识和其他元数据组成。
正文
ZeroMQ 中消息的正文是指正在发送的实际数据。这是应用程序处理的消息的有效负载。正文是在套接字之间传输的主要内容。
帧
在处理更复杂的套接字类型(如 STREAM 和 ROUTER)时,帧的概念很重要。消息可以拆分为多个帧,其中每个帧都是一块数据,它们一起构成完整的消息。这对于处理大型消息或包含多个部分的消息非常有用。
ZeroMQ 本身不像某些协议那样定义或实现特定类型的消息框架。相反,ZeroMQ 提供了一个灵活的消息系统,其中消息的框架和序列化由应用程序处理。但是,它提供了几种消息传递模式和套接字类型,以不同的方式隐式处理消息帧。它们是 −
发布/订阅 (PUB/SUB)
- 发布者 (PUB) - 向多个订阅者发送消息。
- 订阅者 (SUB - 根据订阅过滤器接收消息。
- 框架 - ZeroMQ 在内部处理框架,但消息按原样发布。
请求/回复 (REQ/REP)
- 请求 (REQ) - 向回复套接字发送请求并等待响应。
- 回复 (REP) - 接收请求并发送响应。
- 框架 - ZeroMQ 将消息框架为离散实体,维护请求和响应协议。
DEALER 和 ROUTER
- 经销商 (DEALER) - 充当非阻塞请求者,能够同时处理多个请求。
- 路由器 (ROUTER) - 以更复杂的方式处理消息,根据身份或其他标准路由消息。
- 框架 - 消息包括路由元数据或标识符,ZeroMQ 使用此元数据构建消息以进行路由。
推送和拉取
- 推送 (PUSH) - 将消息发送到拉取套接字,通常用于分配任务。
- 拉取 (PULL) - 从推送套接字接收消息。
- 框架 - 消息以循环技术分发,ZeroMQ 在内部处理框架。
交付保证
ZeroMQ 确实不提供内置的消息传递保证,ZeroMQ 中也没有自动重试机制。如果发送消息后,接收方不可用或发生网络故障,则消息可能会丢失。