您好,登錄后才能下訂單哦!
分布式消息服務DMS如何實現死信消息的消費,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
死信消息是什么
死信消息是指無法被正常消費的消息。分布式消息服務DMS支持對消息進行異常處理。當消息進行多次重復消費仍然失敗后,DMS會將該條消息轉存到死信隊列中,有效期為72小時,用戶可以根據需要對死信消息進行重新消費。消費死信消息時,只能消費該消費組產生的死信消息。全局有序的普通隊列的死信消息依然按照先入先出(FIFO)的順序存儲在死信隊列中。
如何消費死信消息
消費指定消費組產生的死信消息。可同時消費多條消息,每次消費的消息負載不超過512KB。僅NORMAL隊列和FIFO隊列可以開啟死信消息,因為只有NORMAL隊列和FIFO隊列可消費死信消息。
URI
GET /v1.0/{project_id}/queues/{queue_id}/groups/{consumer_group_id}/deadletters?max_msgs={max_msgs}&time_wait={time_wait}&ack_wait={ack_wait}
參數說明請參見下表:
名稱 | 類型 | 是否必選 | 說明 | 取值范圍 |
project_id | string | 是 | 項目ID。 | N/A |
queue_id | string | 是 | 指定的隊列ID。 | N/A |
consumer_group_id | String | 是 | 消費組的ID。從查看指定隊列的所有消費組的響應消息中獲取消費組ID。 | N/A |
max_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隊列可消費死信消息。
URI
POST /v1.0/{project_id}/queues/{queue_id}/groups/{consumer_group_id}/deadletters/ack
參數說明請參見下表:
名稱 | 類型 | 是否必選 | 說明 |
project_id | string | 是 | 項目ID。 |
queue_id | string | 是 | 隊列ID。 |
consumer_group_id | string | 是 | 消費組ID。 |
請求參數和message參數如下表所示:
名稱 | 類型 | 是否必選 | 說明 |
message | array | 是 | 確認消息數組。 |
名稱 | 類型 | 是否必選 | 說明 |
handler | string | 是 | 消費時返回的ID。 |
status | string | 是 | 客戶端處理數據的狀態。 取值為“success”或者“fail”。 |
響應參數
響應參數如下表所示:
參數 | 類型 | 描述 |
success | int | 確認成功的數目(如果為N,則表示前N條死信消息確認成功)。 |
fail | int | 確認失敗的數目(如果為N,則表示后N條死信消息確認失敗)。 |
看完上述內容,你們掌握分布式消息服務DMS如何實現死信消息的消費的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。