原始碼基礎 核心類

2021-10-09 18:47:23 字數 2856 閱讀 6352

分別列舉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...