溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

分布式消息服務(wù)DMS如何實(shí)現(xiàn)死信消息的消費(fèi)

發(fā)布時(shí)間:2021-11-15 17:13:05 來(lái)源:億速云 閱讀:137 作者:柒染 欄目:云計(jì)算

分布式消息服務(wù)DMS如何實(shí)現(xiàn)死信消息的消費(fèi),相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

死信消息是什么

死信消息是指無(wú)法被正常消費(fèi)的消息。分布式消息服務(wù)DMS支持對(duì)消息進(jìn)行異常處理。當(dāng)消息進(jìn)行多次重復(fù)消費(fèi)仍然失敗后,DMS會(huì)將該條消息轉(zhuǎn)存到死信隊(duì)列中,有效期為72小時(shí),用戶(hù)可以根據(jù)需要對(duì)死信消息進(jìn)行重新消費(fèi)。消費(fèi)死信消息時(shí),只能消費(fèi)該消費(fèi)組產(chǎn)生的死信消息。全局有序的普通隊(duì)列的死信消息依然按照先入先出(FIFO)的順序存儲(chǔ)在死信隊(duì)列中。

如何消費(fèi)死信消息

消費(fèi)指定消費(fèi)組產(chǎn)生的死信消息。可同時(shí)消費(fèi)多條消息,每次消費(fèi)的消息負(fù)載不超過(guò)512KB。僅NORMAL隊(duì)列和FIFO隊(duì)列可以開(kāi)啟死信消息,因?yàn)橹挥蠳ORMAL隊(duì)列和FIFO隊(duì)列可消費(fèi)死信消息。

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}

參數(shù)說(shuō)明請(qǐng)參見(jiàn)下表:

名稱(chēng)

類(lèi)型

是否必選

說(shuō)明

取值范圍

project_id

string

項(xiàng)目ID。

N/A

queue_id

string

指定的隊(duì)列ID。

N/A

consumer_group_id

String

消費(fèi)組的ID。從查看指定隊(duì)列的所有消費(fèi)組的響應(yīng)消息中獲取消費(fèi)組ID。

N/A

max_msgs

int

獲取可消費(fèi)的死信消息的條數(shù)。

說(shuō)明:

單次消費(fèi)返回的消息數(shù)量可能會(huì)少于指定條數(shù),但多次消費(fèi)最終可獲取全部消息。

取值范圍:1~10。

默認(rèn)值:10

time_wait

int

設(shè)定消費(fèi)組中可消費(fèi)的死信為0時(shí)的讀取消息等待時(shí)間。

如果在等待時(shí)間內(nèi)有新的死信消息,則立即返回消費(fèi)結(jié)果,如果等待時(shí)間內(nèi)沒(méi)有新的死信消息,則到等待時(shí)間后返回消費(fèi)結(jié)果。

取值范圍:1~60s

默認(rèn)值:3s

說(shuō)明:不帶該參數(shù)或者配置為空,都默認(rèn)為3s。

ack_wait

int

commit提交超時(shí)時(shí)間,在該時(shí)間內(nèi)提交確認(rèn),確認(rèn)有效,如果超過(guò)指定時(shí)間,系統(tǒng)會(huì)報(bào)消息確認(rèn)超時(shí),或handler無(wú)效。

取值范圍:15~300s

默認(rèn)值:30s

說(shuō)明:不帶該參數(shù)或者配置為空,都默認(rèn)為30s。

響應(yīng)參數(shù)

參數(shù)

類(lèi)型

描述

message

JSON對(duì)象

消息的內(nèi)容

handler

string

消息handler

message參數(shù)

參數(shù)

類(lèi)型

描述

body

JSON

消息體的內(nèi)容。

attributes

JSON對(duì)象

屬性的列表。

 

 

如何確認(rèn)已消費(fèi)死信消息

在消費(fèi)者消費(fèi)死信消息期間,死信消息仍然停留在隊(duì)列中,但死信消息從被消費(fèi)開(kāi)始的30秒內(nèi)不能被該消費(fèi)組再次消費(fèi),若在這30秒內(nèi)沒(méi)有被消費(fèi)者確認(rèn)消費(fèi),則DMS認(rèn)為死信消息未消費(fèi)成功,將可以被繼續(xù)消費(fèi)。

如果死信消息被確認(rèn)消費(fèi)成功,該死信消息將不能被該消費(fèi)組再次消費(fèi),死信消息的保留時(shí)間為72小時(shí)(除非消費(fèi)組被刪除),72小時(shí)后會(huì)被刪除。

消息批量消費(fèi)確認(rèn)時(shí),必須嚴(yán)格按照消息消費(fèi)的順序提交確認(rèn),DMS按順序判定消息是否消費(fèi)成功,如果某條消息未確認(rèn)或消費(fèi)失敗,則不再繼續(xù)檢測(cè),默認(rèn)后續(xù)消息全部消費(fèi)失敗。建議當(dāng)對(duì)某一條消息處理失敗時(shí),不再需要繼續(xù)處理本批消息中的后續(xù)消息,直接對(duì)已正確處理的消息進(jìn)行確認(rèn)。

注意,僅NORMAL隊(duì)列和FIFO隊(duì)列可以開(kāi)啟死信消息,因?yàn)橹挥蠳ORMAL隊(duì)列和FIFO隊(duì)列可消費(fèi)死信消息。

URI

POST /v1.0/{project_id}/queues/{queue_id}/groups/{consumer_group_id}/deadletters/ack

參數(shù)說(shuō)明請(qǐng)參見(jiàn)下表:

名稱(chēng)

類(lèi)型

是否必選

說(shuō)明

project_id

string

項(xiàng)目ID。

queue_id

string

隊(duì)列ID。

consumer_group_id

string

消費(fèi)組ID。

 

請(qǐng)求參數(shù)和message參數(shù)如下表所示:

名稱(chēng)

類(lèi)型

是否必選

說(shuō)明

message

array

確認(rèn)消息數(shù)組。

 

名稱(chēng)

類(lèi)型

是否必選

說(shuō)明

handler

string

消費(fèi)時(shí)返回的ID。

status

string

客戶(hù)端處理數(shù)據(jù)的狀態(tài)。

取值為“success”或者“fail”。

 

響應(yīng)參數(shù)

響應(yīng)參數(shù)如下表所示:

參數(shù)

類(lèi)型

描述

success

int

確認(rèn)成功的數(shù)目(如果為N,則表示前N條死信消息確認(rèn)成功)。

fail

int

確認(rèn)失敗的數(shù)目(如果為N,則表示后N條死信消息確認(rèn)失敗)。

看完上述內(nèi)容,你們掌握分布式消息服務(wù)DMS如何實(shí)現(xiàn)死信消息的消費(fèi)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

dms
AI