RocketMQ 客戶端最佳實踐
1. Producer最佳實踐
發送消息注意事項
1). 一個應用盡可能用一個Topic,消息子類型用tags來標識,tags可以由應用自由設置。
2). 消息發送成功或者失敗,要打印消息日志,務必要打印sendresult和key字段。
SEND_OK,消息發送成功。
3). 對於消息不可丟失應用,務必要有消息重發機制,例如如果消息發送失敗,存儲到數據庫,能有定時程序嘗試重發,或者人工觸發重發。
2. 消息發送失敗如何處理:
1).重試
2).如果調用send同步方法發送失敗,則嘗試將消息存儲到db,由后台線程定時重試,保證消息一定到達Broker。
3.Consumer 最佳實踐
1). 消費過程要做到冪等
RocketMQ目前無法避免消息重復,所以如果業務對消費重復非常敏感,務必要在業務層面去重,有以下幾種去重方式:
a).將消息的唯一鍵,可以是msgId,也可以是消息內容中的唯一標識字段,例如訂單Id等,消費之前判斷是否在Db或Tair(全局KV存儲)中存在,如果不存在則插入,並消費,否則跳過。
b). 用業務層面的狀態機去重。
2). 提高消費並行度
a). 同一個ConsumerGroup下,通過增加Consumer實例數量來提高並行度,超過訂閱隊列數的Consumer實例無效。可以通過加機器,或者在已有機器啟動多個進程的方式。
b). 提高單個Consumer的消費並行線程,通過修改以下參數: consumeThreadMin consumeThreadMax
3). 消息批量消費
4). 跳過非重要消息
5). 優化每條消息消費過程