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的先後順序。