RocketMq 專題

1、https://www.jianshu.com/p/453c6e7ff81c

2、https://github.com/a2888409/RocketMQ-Learning/blob/master/book/ch2/2-remoting.md

3、中間件博客:http://jm.taobao.org/2017/01/26/20170126/

4、https://yq.aliyun.com/articles/165103

5、介紹詳細,但是細節不可信:https://juejin.im/post/5de3c8026fb9a07194761641

6、mq 存儲文件:https://my.oschina.net/mingxungu/blog/3083961

https://my.oschina.net/liangxiao/blog/3002888

7、順序消費:http://lifestack.cn/archives/483.html

8、indexFile:https://www.jianshu.com/p/c61945e628fb

 

啓動rocketmq參考資料

1、本地運行代碼:https://juejin.im/post/5d35bb6c6fb9a07ee5665c5a

核心:

啓動環境的配置:ROCKETMQ_HOME=/Users/didi/Downloads/work/rocketMq/rocketmq/bi-path/broker

Broker的配置:-c /Users/didi/Downloads/work/rocketMq/rocketmq/bi-path/broker/conf/broker.conf

2、broker 配置參數:https://blog.csdn.net/wangjinduo35056/article/details/88350263  

https://www.cnblogs.com/qdhxhz/p/11116197.html

 

nameService、broker、product、consumer之間信息的交互

NameSrv監測Broker的死亡

1、每個Broker會每隔30s向NameSrv更新自身topic信息。NameSrv收到RegisterBroker信息,更新自己的brokerLiveTable結構。2、然後NameServer會每10s,掃描一次這個結構。如果發現上次更新時間距離當前時間超過了BROKER_CHANNEL_EXPIRED_TIME = 1000 * 60 * 2(2分鐘),則認爲此broker死亡。

Producer/Consumer如何得知Broker死亡

當某個Broker死亡之後,NameSrv並不會主動通知Producer和Consumer。而是Producer/Consumer週期性的去NameSrv取。這裏的pollNameServerInteval默認是30s。這也就是意味着,默認情況下,當某個Broker掛了之後,Client需要30s的延遲纔會得知此消息。

 

順序消息

概述:順序消息是指某個分區(類比rank函數分區的概念,如果要保證單個訂單在創建、結算、支付等階段的順序性,那麼訂單就是一個分區,也叫局部順序)的不同階段的消息先進先出,具有順序性。

針對順序消息這個功能,Rocket Mq做的努力並不是很多,主要集中在兩個方面:1、在發送消息的時候,通過自定義或是默認的MessageQueueSelector保證相同分區的消息發到相同的MessageQueue裏面,也就是在broker的MessageQueue裏面是順序存儲的。2、在消費順序消息的時候(確認正常消息會不會),會對broker下發針對MessageQueue加鎖的請求,這就保證同一時刻一個MessageQueue只會被一個consumer線程消費。

要正確地使用順序消息,需要在客戶端(product、consumer)使用的時候,注意以下幾點:

1、product要保證消息以正確的順序傳輸給broker。這裏需要強調的是,要儘量避免併發,無論是單機多線程還是集羣環境,因爲併發場景下,使用者無法保證多個消息到達broker的先後順序。


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章