Delivery Semantics

部分內容由 LLM 生成,尚未經過人工驗證。

Message Queue 的 delivery semantics 定義了訊息從 producer 傳送到 consumer 的保證程度。

At-most-once

訊息最多傳送一次,可能遺失,但不會重複。

Producer 送出後不等確認,Consumer 收到後立即 ack(無論是否處理成功)。若 consumer 在處理途中崩潰,該訊息不會重送。

適用於允許資料遺失的場景,例如即時監控指標、日誌統計。

At-least-once

訊息至少傳送一次,不會遺失,但可能重複。

Producer 未收到 ack 時會重送;Consumer 處理完畢後才 ack,若 ack 前崩潰則會再次收到同一訊息。

適用於不允許遺失但可容忍重複的場景,需搭配冪等性(idempotency)處理重複問題。

Exactly-once

訊息恰好傳送一次,不遺失也不重複。

實作成本最高,需要 producer 端的冪等寫入、broker 端的去重機制,以及 consumer 端的 transactional 處理。

適用於金融交易、訂單處理等對一致性要求嚴格的場景。