前沿拓展:
setproperty
jsp:setProperty用來(lái)設(shè)置已經(jīng)實(shí)例化的Bean對(duì)象的屬性;
name屬性:表示要設(shè)置屬性的是哪個(gè)Bea
除了實(shí)時(shí)消息,QMQ還支持任意時(shí)間的延時(shí)消息,當(dāng)時(shí)在開(kāi)源版本的RocektMQ里提供了多種固定延遲level的延時(shí)消息支持,也就是可以發(fā)送幾種固定延時(shí)時(shí)間的延時(shí)消息,比如延時(shí)10s, 30s…,但是基于我們現(xiàn)有的業(yè)務(wù)特征,這種不同延時(shí)level的延時(shí)消息并不能滿足我們的需求,我們需要任意時(shí)間延時(shí)。在OTA場(chǎng)景中,客人經(jīng)常是預(yù)訂未來(lái)某個(gè)時(shí)刻的酒店或者機(jī)票,這個(gè)時(shí)間是不固定的,我們無(wú)法使用幾個(gè)固定的延時(shí)level來(lái)實(shí)現(xiàn)這個(gè)場(chǎng)景。
我們的延時(shí)消息是使用兩層hash wheel timer來(lái)實(shí)現(xiàn)的。第一層位于磁盤(pán)上,每個(gè)小時(shí)(默認(rèn)一個(gè)小時(shí),可配置)為一個(gè)刻度,每個(gè)刻度會(huì)生成一個(gè)數(shù)據(jù)日志文件,根據(jù)業(yè)務(wù)特征,我們覺(jué)得支持兩年(默認(rèn)兩年,可配置)內(nèi)任意時(shí)間延時(shí)就夠了,那么最多會(huì)生成2 * 366 * 24 = 17568個(gè)文件。第二層在內(nèi)存中,當(dāng)消息的投遞時(shí)間即將到來(lái)的時(shí)候,會(huì)將這個(gè)小時(shí)的消息索引 (偏移量,投遞時(shí)間等) 從磁盤(pán)文件加載到內(nèi)存中的 hash wheel timer上。
在延時(shí)消息里也存在三種 log:
message log,和實(shí)時(shí)消息里的message log類似,收到消息后append到該 log,append成功后立即返回。
schedule log,按照投遞時(shí)間組織,每小時(shí)一個(gè)。該log是回放message log后根據(jù)延時(shí)時(shí)間放置對(duì)應(yīng)的log上,這是上面描述的兩層hash wheel timer的第一層,位于磁盤(pán)上。該log包含完整消息內(nèi)容,所以message log里回放了之前的都可以刪除,可以大大的節(jié)約磁盤(pán)空間。
dispatch log,延時(shí)消息投遞后寫(xiě)入,主要用于在應(yīng)用重啟后能確定哪些消息已經(jīng)投遞。
工程地址:https://github.com/qunarcorp/qmq
作者簡(jiǎn)介:去哪兒網(wǎng)QMQ團(tuán)隊(duì)隸屬于去哪兒網(wǎng)基礎(chǔ)研發(fā)部 – 基礎(chǔ)架構(gòu)部,主要負(fù)責(zé)開(kāi)發(fā)和維護(hù)QMQ消息中間件,滿足業(yè)務(wù)團(tuán)隊(duì)需求,為業(yè)務(wù)團(tuán)隊(duì)提供良好的消息使用體驗(yàn),同時(shí)保證系統(tǒng)的平穩(wěn)運(yùn)行。
負(fù)責(zé)人王克禮:2015年加入去哪兒網(wǎng),資深Java開(kāi)發(fā)工程師,具備多年企業(yè)中間件的開(kāi)發(fā)實(shí)踐經(jīng)驗(yàn),完整參與了QMQ新版本的設(shè)計(jì)與實(shí)現(xiàn),希望能夠持續(xù)提升QMQ。
【END】
拓展知識(shí):
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請(qǐng)注明出處:http:///71504.html