metaq原始碼解讀之FetchManager

2021-09-02 10:26:58 字數 1407 閱讀 3667

fetchmanager:請求管理器介面。

既然是管理器,就需要知道管理的物件是什麼?fetchrequest——管理的是一次次的請求。

既然是管理器,就需要給被管理者提供容所?fetchrequestqueue——請求delay queue。

既然是管理器,就需要有管理實施者?fetchrequestrunner——從請求佇列中提取請求,然後處理。

既然是管理器,就需要知道管理了哪些事情?

① 啟動請求處理器

② 停止請求處理器

③ 重置亦即初始化管理器

④ 新增請求

⑤ 獲取請求總數

⑥ 標記處理器狀態

管理器如何管理的?

①處理器 fetchrequestrunner

while (!this.stopped)  catch (final interruptedexception e) 

}

void processrequest(final fetchrequest request) 

}

②請求佇列 fetchrequestqueue

//佇列中定義的執行緒用來等待佇列的頭元素。這種leader-follower設計模式的變種有助於使等待的時間最小化。當乙個執行緒變為leader,它只需等待下乙個delay的時間,而其他執行緒將無限期等待。

//leader執行緒在從take()或者poll()等等方法返回之前必須signal其他執行緒,除非這期間其他執行緒變成了leader執行緒。

//每當佇列的頭結點被更早到期時間的節點替代,leader失效被重新設定為null,其他的執行緒——不一定是當前的leader,將被signal。

//因此等待執行緒要時刻準備著獲取leader或者喪失leader

private thread leader = null;

public void offer(fetchrequest e)

// 請求關聯本佇列

e.setrefqueue(this);

//入隊、排序

this.queue.offer(e);

collections.sort(this.queue);

// leader is changed.

if (this.queue.peek() == e)

}finally

}public fetchrequest take() throws interruptedexception

else

else if (this.leader != null)

else

finally }}

}}

}finally

lock.unlock();

}}

metaq原始碼分析 一

一 metaq簡介 metaq 全稱metamorphosis 是乙個高效能 高可用 可擴充套件的分布式消 息中介軟體,metaq具有訊息儲存順序寫 吞吐量大和支援本地和xa事務等特性,適用於大吞吐量 順序訊息 廣播和日誌資料傳輸等場景,metaq在阿 裡巴巴各個子公司被廣泛應用,每天 250億 條...

MetaQ技術內幕 原始碼分析 一

筆者最近在業務上需要使用到metaq,也藉此閱讀了metaq的相關原始碼,準備分享metaq原始碼分析。先掃掃盲,如果讀者對metaq已經較為熟悉,可以跳過下一段落。一 metaq簡介 metaq 全稱metamorphosis 是乙個高效能 高可用 可擴充套件的分布式訊息中介軟體,metaq具有訊...

Qwt原始碼解讀之QwtInterval 類

qwtinterval 類表徵乙個區間,這個區間由兩個double型別的上限值max和下限值min所表示。它可以表示 min,max min,max min,max 和 min,max 等4種情況。分析 cpp view plain copy class qwt export qwtinterval...