分布式訊息服務DMS如何實現死信訊息的消費

2022-08-25 09:54:10 字數 3433 閱讀 9510

本文部分內容節選自華為雲幫助中心的分布式訊息服務(dms)服務的產品介紹

死信訊息是什麼

死信訊息是指無法被正常消費的訊息。分布式訊息服務dms支援對訊息進行異常處理。當訊息進行多次重複消費仍然失敗後,dms會將該條訊息轉存到死信佇列中,有效期為72小時,使用者可以根據需要對死信訊息進行重新消費。消費死信訊息時,只能消費該消費組產生的死信訊息。全域性有序的普通佇列的死信訊息依然按照先入先出(fifo)的順序儲存在死信佇列中。

如何消費死信訊息

消費指定消費組產生的死信訊息。可同時消費多條訊息,每次消費的訊息負載不超過512kb。僅normal佇列和fifo佇列可以開啟死信訊息,因為只有normal佇列和fifo佇列可消費死信訊息。

uriget /v1.0//queues//groups//deadletters?max_msgs=&time_wait=&ack_wait=

引數說明請參見下表:

引數說明

名稱

型別

是否必選

說明

取值範圍

project_id

string

是專案id。

n/aqueue_id

string

是指定的佇列id。

n/aconsumer_group_id

string

是消費組的id。從檢視指定佇列的所有消費組的響應訊息中獲取消費組id。

n/amax_msgs

int否

獲取可消費的死信訊息的條數。

說明:

單次消費返回的訊息數量可能會少於指定條數,但多次消費最終可獲取全部訊息。

取值範圍:1~10。

預設值:10

time_wait

int否

設定消費組中可消費的死信為0時的讀取訊息等待時間。

如果在等待時間內有新的死信訊息,則立即返回消費結果,如果等待時間內沒有新的死信訊息,則到等待時間後返回消費結果。

取值範圍:1~60s

預設值:3s

說明:不帶該引數或者配置為空,都預設為3s。

ack_wait

int否

commit提交超時時間,在該時間內提交確認,確認有效,如果超過指定時間,系統會報訊息確認超時,或handler無效。

取值範圍:15~300s

預設值:30s

說明:不帶該引數或者配置為空,都預設為30s。

響應引數

引數

型別

描述

message

json物件

訊息的內容。

handler

string

訊息handler。

message引數

引數

型別

描述

body

json

訊息體的內容。

attributes

json物件

屬性的列表。

如何確認已消費死信訊息

在消費者消費死信訊息期間,死信訊息仍然停留在佇列中,但死信訊息從被消費開始的30秒內不能被該消費組再次消費,若在這30秒內沒有被消費者確認消費,則dms認為死信訊息未消費成功,將可以被繼續消費。

如果死信訊息被確認消費成功,該死信訊息將不能被該消費組再次消費,死信訊息的保留時間為72小時(除非消費組被刪除),72小時後會被刪除。

訊息批量消費確認時,必須嚴格按照訊息消費的順序提交確認,dms按順序判定訊息是否消費成功,如果某條訊息未確認或消費失敗,則不再繼續檢測,預設後續訊息全部消費失敗。建議當對某一條訊息處理失敗時,不再需要繼續處理本批訊息中的後續訊息,直接對已正確處理的訊息進行確認。

注意,僅normal佇列和fifo佇列可以開啟死信訊息,因為只有normal佇列和fifo佇列可消費死信訊息。

uripost /v1.0//queues//groups//deadletters/ack

引數說明請參見下表:

引數說明

名稱

型別

是否必選

說明

project_id

string

是專案id。

queue_id

string

是佇列id。

consumer_group_id

string

是消費組id。

請求引數和message引數如下表所示:

請求引數

名稱

型別

是否必選

說明

message

array

是確認訊息陣列。

message引數

名稱

型別

是否必選

說明

handler

string

是消費時返回的id。

status

string

是客戶端處理資料的狀態。

取值為「success」或者「fail」。

響應引數

響應引數如下表所示:

4響應引數

引數

型別

描述

success

int確認成功的數目(如果為n,則表示前n條死信訊息確認成功)。

fail

int確認失敗的數目(如果為n,則表示後n條死信訊息確認失敗)。

分布式服務如何設計分布式事務

1 如果a b c強相關 考慮採用tcc框架 try confirm cancel bytetcc,himly 阿里的fescar,seata 推薦使用seata tcc框架 2 如果a 與bc並不強相關 考慮可靠訊息最終一致性解決方案,例如a成功後通過傳送kafka事件,bc監聽事件來處理。roc...

訊息佇列實現分布式事務

訊息佇列中的 事務 主要解決的是訊息生產者和訊息消費者的資料一致性問題。電商下單步驟 1 生成訂單 2 刪除購物車 在分布式系統中,任何乙個步驟都有可能失敗,可能出現訂單資料與購物車資料不一致的情況,比如說 1 建立了訂單,沒有清理購物車 2 訂單沒建立成功,購物車裡面的商品卻被清掉了。訂單系統給訊...

分布式訊息佇列

以下是訊息佇列以下的大綱,本文主要介紹訊息佇列概述,訊息佇列應用場景和訊息中介軟體示例 電商,日誌系統 訊息佇列概述 訊息佇列應用場景 訊息中介軟體示例 jms訊息服務 見第二篇 大型 架構系列 分布式訊息佇列 二 常用訊息佇列 見第二篇 大型 架構系列 分布式訊息佇列 二 參考 推薦 資料 見第二...