Push消息消費(fèi)流程圖示.jpg
????rocketmq中消息消費(fèi)方式有拉Pull和推Push方式拷况,Push其實(shí)是對(duì)Pull方式的封裝作煌,后臺(tái)線程不停產(chǎn)生消息拉取請(qǐng)求,不停從broker拉取消息到Consumer消費(fèi)赚瘦,這里是偽推模式粟誓,不是真正的broker推,而是client端對(duì)拉Pull模式的封裝起意,不停滴拉就等于推鹰服。
????順序消息,rocketmq只能做到MessageQueue維度的絕對(duì)順序,不能做到topic全局絕對(duì)順序悲酷。順序消息一句話套菜,就是做什么事情之前先獲取鎖MessageQueue鎖和ProcessQueue鎖,創(chuàng)建消息拉取請(qǐng)求前獲取到鎖才能創(chuàng)建拉取請(qǐng)求设易,拉取消息前獲取鎖逗柴,消費(fèi)消息前獲取鎖,消息消費(fèi)請(qǐng)求在ConsumerMessageService線程池中消費(fèi)的時(shí)候先獲取鎖顿肺。這樣就保證了消息的順序戏溺。
????消息拉取到client端是亂的,不是按消費(fèi)偏移量順序排序的挟冠,而且在線程池中消費(fèi)于购,所以更新消費(fèi)進(jìn)度的時(shí)候,防止更新消費(fèi)偏移量錯(cuò)亂知染,client端使用了TreeMap來存放消息肋僧,保證了更新消息消費(fèi)偏移量的順序性。