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 中沒有自動重試機制。如果傳送訊息但接收者不可用或網路發生故障,則訊息可能會丟失。

廣告