RocketMQ生产者组topic和消费组的关系
各個之間的關系其實很松散,并不是說不能操作
最佳實踐
訂閱關系一致
多個 Group ID 訂閱了多個 Topic,并且每個 Group ID 里的多個消費者實例的訂閱關系保持了一致。
消費冪等
最終一致性保證數據一致性,如果不冪等,將導致數據錯亂
topic和tag的關系
topic可以是一級過濾關系 tag是二級過濾關系
使用:
業務消息往往推薦做topic 的 一級區分
tag往往用于過濾后續的消息
例如: 飛躍交易消息 和 飛躍物流消息 topic
飛躍化妝品下單消息 和 飛躍電器下單消息 tag
消費模式
集群消費和廣播消費
推薦集群消費
可以用集群消費模擬廣播消費,例如創建多個GroupID模擬廣播消費
問題解釋:
訂閱關系不一致
同一消費組下不同消費者訂閱關系
導致消息丟失
關鍵的代碼: ConsumerGroupInfo.updateSubscription(final Set subList) 關鍵代碼: if (sub.getTopic().equals(oldTopic)) { exist = true; break; } … it.remove(); updated = true; 這里其實是做了一個檢查,做這個檢查的默認前提是一個consumerGroup下面的訂閱消息是一樣的,就是每個consumer注冊的subscription應該是一樣的,如果不一樣就把之前注冊的刪除
未做冪等或者沒做好
1.在TCC中,發送一條訂單過期取消的消息,由于未做冪等導致,導致復活該訂單失敗(其實本身不推薦這樣,推薦的操作是,用戶去查詢失效的訂單時,選擇再來一單即可,而不是復活訂單)
2.僅僅通過redis的分布式鎖來做冪等:原有業務是查詢緩存,然后修改緩存,再落庫
但是在查詢緩存時由于緩存失效,導致去數據庫查詢緩存,結果超過了紅鎖的查詢時間(10分鐘),導致該消息的冪等操作失效,由其他消息修改了原有數據,導致錯亂
參考:
https://www.jianshu.com/p/2838890f3284
https://help.aliyun.com/document_detail/95837.html
總結
以上是生活随笔為你收集整理的RocketMQ生产者组topic和消费组的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国财团买得了 Opera,买不了仙童半
- 下一篇: 迁移到AndroidX报错Program