分別列舉client、nameserver、broker三個部分的核心類,rocketmq的功能實現跟這些類密不可分。有時間的話,可以一一弄清楚每個類的具體作用。
對於生產訊息來說,我們一般接觸的第乙個類就是它。
defaultmqproducer producer = new defaultmqproducer(this.groupname);
producer.setnamesrvaddr(this.namesrvaddr);
producer.start();
是不是很熟悉的三句**。
由它我們馬上就會認識defaultmqproducerimpl,生產者的主要邏輯都在這個裡面。
private final concurrentmaptopicpublishinfotable;
private mqclientinstance mqclientfactory;
在展開邏輯之前,我們還需要認識以下兩個類:mqclientmanager和mqclientinstance。
client的管理類,這是乙個單例類。乙個應用只會存在乙個例項。
這個類需要關注的成員變數:
需要關注clientid的計算方式。貼一下**:
public string buildmqclientid()
return sb.tostring();
}
可以看出,clientid = clientip@instancename[@unitname],如果你需要在乙個應用中對接多個rocketmq,那麼一定要設定instancename。
乙個客戶端例項,核心的成員變數列舉如下:
private final string clientid;
private final concurrentmapproducertable;
private final concurrentmapconsumertable;
private final nettyclientconfig nettyclientconfig;
private final clientconfig clientconfig;
private final mqclientapiimpl mqclientapiimpl;
private final mqadminimpl mqadminimpl;
private final concurrentmaptopicroutetable;
private final concurrentmap> brokeraddrtable;
private final concurrentmap> brokerversiontable;
按照rocketmq的設想,
private offsetstore offsetstore;
private rebalanceimpl rebalanceimpl;
protected final concurrentmap> topicsubscribeinfotable;
protected final concurrentmapsubscriptioninner;
protected final concurrentmapprocessqueuetable;
private listqueuedatas;
private list
brokerdatas;
private string brokername;
private int readqueuenums;
private int writequeuenums;
private int perm;
private string cluster;
private string brokername;
private hashmapbrokeraddrs;
private final hashmap> topicqueuetable;
private final hashmapbrokeraddrtable;
private final hashmap> clusteraddrtable;
private final hashmapbrokerlivetable;
private final hashmap/* filter server */> filterservertable;
commitlog
consumequeue
indexfile
commitlog commitlog;
concurrentmap> consumequeuetable;
hashmaptopicqueuetable;
string topic;
int queueid;
string storepath;
protected final atomicinteger wroteposition
protected final atomicinteger committedposition
private final atomicinteger flushedposition
protected int filesize;
protected filechannel filechannel;
protected bytebuffer writebuffer = null;
protected transientstorepool transientstorepool
private string filename;
private long filefromoffset;
private file file;
原始碼學習的其他方面的,有興趣了解的可以看看:
核心原始碼解讀基礎
module init巨集的定義 第一段 typedef int initcall t void define define initcall level,fn,id static initcall t initcall fn id attribute used attribute section ...
ThinkPHP核心類原始碼剖析
分析thinkphp原始碼中的設計模式。估計會有點讓你費解 至於第二部分的內容。我還是先寫成文章吧。1,對action類的分析 1 indexaction,otheraction表示使用者自己建立的一系列控制器,這些控制器都會繼承於action類。2 action,控制基類。他的檔案位址位於 thi...
Junit3 8原始碼 核心類
好久沒畫圖了,看下這個序列圖,還算比較清晰的 以textui來分析 頂層介面。testsuite和testcase均實現此介面,在具體執行的時候面向此介面程式設計,弱化型別,實現各自的執行流程。testsuite中的run方法 public void run testresult result pu...