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