如何提高佇列的訊息處理效率

2021-08-20 09:30:06 字數 1403 閱讀 6364

宣告:本文並非原創,**華為雲幫助中心的分布式訊息服務(dms)

的使用者指南。客戶端連線方法通用,故摘抄過來分享給大家。

訊息傳送和消費的可靠性必須由dms服務和生產者以及消費者協同工作才能保證。同時開發者需要盡量合理使用dms訊息佇列,以提高訊息傳送和訊息消費的效率與準確性。

對使用dms服務的生產者和消費者有如下的使用建議:

重視訊息生產與消費的確認過程

訊息生產(傳送)

傳送訊息後,生產者需要根據dms的返回資訊確認訊息是否傳送成功,如果返回失敗需要重新傳送。

每次生產訊息,生產者都需要等待訊息傳送api的應答訊號,以確認訊息是否成功傳送。在訊息傳遞過程中,如果發生異常,生產者沒有接收到傳送成功的訊號,生產者自己決策是否需要重**送訊息。如果接收到傳送成功的訊號,則表明該訊息已經被dms可靠儲存。

訊息消費

訊息消費時,消費者需要確認訊息是否已被成功消費。

生產的訊息被依次儲存在dms的儲存介質中。消費時依次獲取dms中儲存的訊息。消費者獲取訊息後,進行消費並記錄消費成功或失敗的狀態,並將消費狀態提交到dms,由dms決定消費下一批訊息或回滾重新消費訊息。

在消費過程中,如果出現異常,沒有提交消費確認,該批訊息會在後續的消費請求中再次被獲取。

訊息生產與消費的冪等傳遞

dms設計了一系列可靠性保障措施,確保訊息不丟失。例如使用訊息同步儲存機制防止系統與伺服器層面的異常重啟或者掉電,使用訊息確認(ack)機制解決訊息傳輸過程中遇到的異常。

考慮到網路異常等極端情況,使用者除了做好訊息生產與消費的確認,還需要配合dms完成訊息傳送與消費的重複傳輸設計。

訊息可以批量生產和消費

為提高訊息傳送和訊息消費效率,推薦使用批量訊息傳送和消費。通常,預設訊息消費為批量消費,而訊息傳送盡可能採用批量傳送。同時批量方式可有效減少api呼叫次數,減少服務使用費用。

如下面兩張示意圖對比所示,訊息批量生產與消費,可以減少api呼叫次數,節約資源。

圖1 訊息批量生產(傳送)與消費 

批量傳送訊息時,單次不能超過10條訊息,總大小不能超過512kb。

批量生產(傳送)訊息可以靈活使用,在訊息併發多的時候,批量傳送,併發少時,單條傳送。這樣能夠在減少呼叫次數的同時保證訊息傳送的實時性。

圖2 訊息逐條生產(傳送)與消費 

此外,批量消費訊息時,消費者應按照接收的順序對訊息進行處理、確認,當對某一條訊息處理失敗時,不再需要繼續處理本批訊息中的後續訊息,直接對已正確處理的訊息進行確認即可。

巧用消費組協助運維

使用者使用dms服務作為訊息管理系統,檢視佇列的訊息內容對於定位問題與除錯服務是至關重要的。

當訊息的生產和消費過程中遇到疑難問題時,通過建立不同消費組可以幫助定位分析問題或除錯服務對接。使用者可以建立乙個新的消費組,對佇列中的訊息進行消費並分析消費過程,這樣不會影響其他服務對訊息的處理。

如何提高佇列的訊息處理效率

宣告 本文並非原創,華為雲幫助中心的分布式訊息服務 dms 的使用者指南。客戶端連線方法通用,故摘抄過來分享給大家。訊息傳送和消費的可靠性必須由dms服務和生產者以及消費者協同工作才能保證。同時開發者需要盡量合理使用dms訊息佇列,以提高訊息傳送和訊息消費的效率與準確性。對使用dms服務的生產者和消...

訊息佇列如何處理重複訊息

一 訊息重複現象 在 mqtt 協議中,給出了三種傳遞訊息時能夠提供的服務質量標準 at most once 最多一次,這種情況會丟失部分資料,一般日誌收集這種對資料不嚴格的可以使用 at least once 最少一次,這種會導致一條訊息重 送 exactly once 正好一次,一條訊息只會被消...

如何提高編碼的效率

1 明確專案需求 2 將專案需求細分,形成每乙個具體的,可實現的過程 3 如果乙個專案實現,需要到多種新的技術,而這些技術我們之前又沒有接觸過,建議每一種技術先看一些基本的簡單例子,自己動手做做乙個簡單的damo,掌握了相關的技術細節後,再遷移到開發的專案中來 4 如何快速解決專案開發中遇到的問題。...