消息發送和消費的可靠性必須由DMS服務和生產者以及消費者協同工作才能保證。同時開發者需要盡量合理使用DMS消息隊列,以提高消息發送和消息消費的效率與準確性。
對使用DMS服務的生產者和消費者有如下的使用建議:
重視消息生產與消費的確認過程
消息生產(發送)
發送消息后,生產者需要根據DMS的返回信息確認消息是否發送成功,如果返回失敗需要重新發送。
每次生產消息,生產者都需要等待消息發送API的應答信號,以確認消息是否成功發送。在消息傳遞過程中,如果發生異常,生產者沒有接收到發送成功的信號,生產者自己決策是否需要重復發送消息。如果接收到發送成功的信號,則表明該消息已經被DMS可靠存儲。
消息消費
消息消費時,消費者需要確認消息是否已被成功消費。
生產的消息被依次存儲在DMS的存儲介質中。消費時依次獲取DMS中存儲的消息。消費者獲取消息后,進行消費并記錄消費成功或失敗的狀態,并將消費狀態提交到DMS,由DMS決定消費下一批消息或回滾重新消費消息。
在消費過程中,如果出現異常,沒有提交消費確認,該批消息會在后續的消費請求中再次被獲取。
消息生產與消費的冪等傳遞
DMS設計了一系列可靠性保障措施,確保消息不丟失。例如使用消息同步存儲機制防止系統與服務器層面的異常重啟或者掉電,使用消息確認(ACK)機制解決消息傳輸過程中遇到的異常。
考慮到網絡異常等極端情況,用戶除了做好消息生產與消費的確認,還需要配合DMS完成消息發送與消費的重復傳輸設計。
- 當無法確認消息是否已發送成功,生產者需要將消息重復發送給DMS。
- 當重復收到已處理過的消息,消費者需要告訴DMS消費成功且保證不重復處理。
消息可以批量生產和消費
為提高消息發送和消息消費效率,推薦使用批量消息發送和消費。通常,默認消息消費為批量消費,而消息發送盡可能采用批量發送。同時批量方式可有效減少API調用次數,減少服務使用費用。
如下面兩張示意圖對比所示,消息批量生產與消費,可以減少API調用次數,節約資源。
圖 消息批量生產(發送)與消費

說明批量發送消息時,單次不能超過10條消息,總大小不能超過512KB。
批量生產(發送)消息可以靈活使用,在消息并發多的時候,批量發送,并發少時,單條發送。這樣能夠在減少調用次數的同時保證消息發送的實時性。
圖 消息逐條生產(發送)與消費

此外,批量消費消息時,消費者應按照接收的順序對消息進行處理、確認,當對某一條消息處理失敗時,不再需要繼續處理本批消息中的后續消息,直接對已正確處理的消息進行確認即可。
巧用消費組協助運維
用戶使用DMS服務作為消息管理系統,查看隊列的消息內容對于定位問題與調試服務是至關重要的。
當消息的生產和消費過程中遇到疑難問題時,通過創建不同消費組可以幫助定位分析問題或調試服務對接。用戶可以創建一個新的消費組,對隊列中的消息進行消費并分析消費過程,這樣不會影響其他服務對消息的處理。