本技術(shù)涉及消息推送,尤其是涉及一種微前端消息推送系統(tǒng)、方法、電子設(shè)備及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、目前,基于websocket的微前端架構(gòu)消息推送方案已經(jīng)得到了廣泛的應(yīng)用,websocket技術(shù)為客戶端與服務(wù)器之間建立了一個(gè)持久的連接,使得雙方能夠進(jìn)行實(shí)時(shí)雙向通信。在微前端架構(gòu)中,每個(gè)微應(yīng)用都可以與后端服務(wù)器建立websocket連接,從而實(shí)時(shí)接收來自服務(wù)器的消息。這種方案在一定程度上滿足了微前端架構(gòu)中消息推送的實(shí)時(shí)性需求。但是存在以下問題:(1)每個(gè)微應(yīng)用都需要獨(dú)立建立websocket連接,這不僅導(dǎo)致服務(wù)器和網(wǎng)絡(luò)資源的過度消耗,還因?yàn)槊總€(gè)微應(yīng)用都需要實(shí)現(xiàn)相似的消息處理邏輯,引發(fā)了大量的重復(fù)開發(fā)工作;(2)在網(wǎng)絡(luò)不穩(wěn)定的情況下,websocket連接容易斷開,導(dǎo)致消息丟失,這對(duì)于實(shí)時(shí)性要求高或安全敏感的微前端應(yīng)用來說是一個(gè)嚴(yán)重的問題;(3)現(xiàn)有的消息推送方案缺乏統(tǒng)一的消息管理,使得消息的發(fā)送、接收過程變得復(fù)雜且難以管理,增加了系統(tǒng)維護(hù)和擴(kuò)展的難度。所以,如何提高消息推送的效率成為了不容小覷的技術(shù)問題。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本技術(shù)的目的在于提供一種微前端消息推送系統(tǒng)、方法、電子設(shè)備及存儲(chǔ)介質(zhì),通過消息推拉組件可以使得所有微應(yīng)用模塊可以共享同一個(gè)消息通道,從而避免了每個(gè)微應(yīng)用模塊都需要自己實(shí)現(xiàn)消息推送和拉取邏輯的重復(fù)工作,通過集中管理和共享消息推送資源,減少不必要的資源消耗,提高系統(tǒng)整體資源利用效率以及消息推送的效率。
2、本技術(shù)實(shí)施例提供了一種微前端消息推送系統(tǒng),所述微前端消息推送系統(tǒng)包括后端im服務(wù)模塊,微前端主應(yīng)用模塊以及多個(gè)微應(yīng)用模塊,所述微前端主應(yīng)用模塊分別與所述后端im服務(wù)模塊以及所述微應(yīng)用模塊通信連接;其中,
3、所述后端im服務(wù)模塊,用于基于第一websocket接口向所述微前端主應(yīng)用模塊發(fā)送推送消息通知,在基于第一http接口接收到所述微前端主應(yīng)用模塊發(fā)送的每個(gè)消息訂閱的拉取消息實(shí)體請求后,將獲取到的多個(gè)目標(biāo)消息發(fā)送給所述微前端主應(yīng)用模塊;
4、所述微前端主應(yīng)用模塊,用于接收到所述微應(yīng)用模塊發(fā)送的多個(gè)消息訂閱請求后完成各個(gè)頁面的消息訂閱,基于消息推拉組件向所述后端im服務(wù)模塊發(fā)送對(duì)每個(gè)所述頁面的消息訂閱進(jìn)行拉取消息實(shí)體請求,將獲取到的多個(gè)所述目標(biāo)消息基于消息訂閱的類型分配至相對(duì)應(yīng)的微應(yīng)用模塊的頁面;
5、所述微應(yīng)用模塊,用于向所述微前端主應(yīng)用模塊發(fā)送各個(gè)頁面的消息訂閱請求,各個(gè)頁面在接收到相對(duì)應(yīng)的目標(biāo)消息后基于預(yù)設(shè)的事件處理邏輯執(zhí)行所述目標(biāo)消息。
6、在一種可能的實(shí)施方式之中,所述消息推拉組件包括:
7、第二websocket接口,用于與所述后端im服務(wù)模塊建立唯一的websocket連接,并接收所述后端im服務(wù)模塊發(fā)送的消息通知;
8、第二http接口,用于在接收到消息通知以及所述微前端主應(yīng)用模塊發(fā)送各個(gè)頁面的消息訂閱請求后,向所述后端im服務(wù)模塊發(fā)送拉取消息實(shí)體請求;
9、消息發(fā)布訂閱接口,用于允許所述微應(yīng)用模塊訂閱要拉取的消息類型,將拉取到的目標(biāo)消息分發(fā)至訂閱了該消息類型的微應(yīng)用模塊的頁面之中;
10、事件總線單元,用于當(dāng)檢測到所述微應(yīng)用模塊的頁面打開事件時(shí),則添加當(dāng)前頁面為活躍頁面,當(dāng)檢測到所述微應(yīng)用模塊的頁面關(guān)閉事件時(shí),將當(dāng)前頁面從活躍頁面中移除,處理消息時(shí)則從活躍頁面中取出訂閱請求的信息進(jìn)行消息拉取。
11、在一種可能的實(shí)施方式之中,所述微前端主應(yīng)用模塊在用于接收到所述微應(yīng)用模塊發(fā)送的多個(gè)消息訂閱請求后完成各個(gè)頁面的消息訂閱,基于消息推拉組件向所述后端im服務(wù)模塊發(fā)送對(duì)每個(gè)所述頁面的消息訂閱進(jìn)行拉取消息實(shí)體請求,將獲取到的多個(gè)所述目標(biāo)消息基于消息訂閱的類型分配至相對(duì)應(yīng)的微應(yīng)用模塊的頁面時(shí),所述微前端主應(yīng)用模塊具體用于:
12、所述微前端主應(yīng)用模塊在用于接收到所述微應(yīng)用模塊發(fā)送的多個(gè)消息訂閱請求后,創(chuàng)建第一數(shù)組保存所有的頁面的消息訂閱,并為每個(gè)頁面創(chuàng)建頁面消息隊(duì)列,以及一個(gè)拉取通知請求組用于保存當(dāng)前頁面已拉取消息的類型及消息的上次拉取位置;
13、當(dāng)檢測到頁面進(jìn)行切換時(shí),將活躍的頁面名稱更新至當(dāng)前頁面名稱數(shù)組之中,將不活躍的頁面名稱從所述當(dāng)前頁面名稱數(shù)組之中移除,以使在執(zhí)行拉取消息實(shí)體請求時(shí)從當(dāng)前頁面名稱數(shù)組中取出頁面的消息訂閱請求進(jìn)行消息實(shí)體的拉取,將獲取到的多個(gè)所述目標(biāo)消息基于消息訂閱的類型分配至相對(duì)應(yīng)的微應(yīng)用模塊的頁面。
14、在一種可能的實(shí)施方式之中,所述微前端主應(yīng)用模塊在用于當(dāng)檢測到頁面進(jìn)行切換時(shí),將活躍的頁面名稱更新至當(dāng)前頁面名稱數(shù)組之中,將不活躍的頁面名稱從所述當(dāng)前頁面名稱數(shù)組之中移除,以使在執(zhí)行拉取消息實(shí)體請求時(shí)從當(dāng)前頁面名稱數(shù)組中取出頁面的消息訂閱請求進(jìn)行消息實(shí)體的拉取,將獲取到的多個(gè)所述目標(biāo)消息基于消息訂閱的類型分配至相對(duì)應(yīng)的微應(yīng)用模塊的頁面時(shí),所述微前端主應(yīng)用模塊具體用于:
15、對(duì)當(dāng)前頁面名稱數(shù)組中的每一所述頁面消息隊(duì)列進(jìn)行遍歷,基于先進(jìn)先出的順序取出第一拉取消息實(shí)體請求,并同時(shí)取出所述拉取通知請求組中同類型的第二拉取消息實(shí)體請求進(jìn)行比對(duì);
16、若所述第二拉取消息實(shí)體請求的拉取數(shù)據(jù)的結(jié)束位置小于所述第一拉取消息實(shí)體請求的上一次偏移量,則將所述第一拉取消息實(shí)體請求的拉取數(shù)據(jù)的起始位置更改為所述第二拉取消息實(shí)體請求的拉取數(shù)據(jù)的結(jié)束位置;
17、調(diào)用第一http接口拉取消息實(shí)體,拉取消息實(shí)體成功后執(zhí)行回調(diào)函數(shù)將所述目標(biāo)消息分發(fā)給微應(yīng)用的頁面,并將所述第一拉取消息實(shí)體請求放入所述拉取通知請求組之中,若所述頁面消息隊(duì)列中還存在拉取消息實(shí)體請求,將繼續(xù)處理直至頁面消息隊(duì)列中的拉取消息實(shí)體請求被完全消費(fèi)。
18、在一種可能的實(shí)施方式之中,所述微前端主應(yīng)用模塊還用于:
19、當(dāng)檢測到所述微應(yīng)用模塊的頁面未進(jìn)行消息訂閱或取消消息訂閱時(shí),則不對(duì)所述微應(yīng)用模塊的頁面進(jìn)行拉取消息實(shí)體處理。
20、在一種可能的實(shí)施方式之中,后端im服務(wù)模塊還包括:
21、第一websocket接口,用于與所述微前端主應(yīng)用模塊建立websocket連接用于實(shí)時(shí)推送消息通知;
22、第一http接口,用于接收所述微前端主應(yīng)用模塊發(fā)送的拉取消息實(shí)體請求以及消息基本信息后,基于所述消息基本信息從消息緩存單元中檢索出對(duì)應(yīng)的目標(biāo)消息發(fā)送至所述微前端主應(yīng)用模塊;
23、消息緩存單元,用于存儲(chǔ)后端微服務(wù)模塊推送的消息實(shí)體數(shù)據(jù)。
24、在一種可能的實(shí)施方式之中,所述微前端主應(yīng)用模塊還用于:
25、檢測當(dāng)前頁面的消息訂閱請求是否存在同名訂閱;
26、若是,則取消先前的所述頁面的消息訂閱請求,對(duì)當(dāng)前所述頁面的消息訂閱請求進(jìn)行處理。
27、本技術(shù)實(shí)施例還提供了一種微前端消息推送方法,所述微前端消息推送方法包括:
28、基于第一websocket接口向微前端主應(yīng)用模塊發(fā)送推送消息通知,接收到微應(yīng)用模塊發(fā)送的多個(gè)消息訂閱請求后完成各個(gè)頁面的消息訂閱;
29、基于消息推拉組件向后端im服務(wù)模塊發(fā)送對(duì)每個(gè)所述頁面的消息訂閱進(jìn)行拉取消息實(shí)體請求,在基于第一http接口接收到微前端主應(yīng)用模塊發(fā)送的每個(gè)消息訂閱的拉取消息實(shí)體請求后,將多個(gè)目標(biāo)消息發(fā)送給微前端主應(yīng)用模塊;
30、將獲取到的多個(gè)所述目標(biāo)消息基于消息訂閱的類型分配至相對(duì)應(yīng)的微應(yīng)用模塊的頁面,各個(gè)頁面在接收到相對(duì)應(yīng)的目標(biāo)消息后基于預(yù)設(shè)的事件處理邏輯執(zhí)行所述目標(biāo)消息。
31、本技術(shù)實(shí)施例還提供一種電子設(shè)備,包括:處理器、存儲(chǔ)器和總線,所述存儲(chǔ)器存儲(chǔ)有所述處理器可執(zhí)行的機(jī)器可讀指令,當(dāng)電子設(shè)備運(yùn)行時(shí),所述處理器與所述存儲(chǔ)器之間通過總線通信,所述機(jī)器可讀指令被所述處理器執(zhí)行時(shí)執(zhí)行如上述的微前端消息推送方法的步驟。
32、本技術(shù)實(shí)施例還提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器運(yùn)行時(shí)執(zhí)行如上述的微前端消息推送方法的步驟。
33、本技術(shù)實(shí)施例提供的一種微前端消息推送系統(tǒng)、方法、電子設(shè)備及存儲(chǔ)介質(zhì),所述微前端消息推送系統(tǒng)包括后端im服務(wù)模塊,微前端主應(yīng)用模塊以及多個(gè)微應(yīng)用模塊,所述微前端主應(yīng)用模塊分別與所述后端im服務(wù)模塊以及所述微應(yīng)用模塊通信連接;其中,所述后端im服務(wù)模塊,用于基于第一websocket接口向所述微前端主應(yīng)用模塊發(fā)送推送消息通知,在基于第一http接口接收到所述微前端主應(yīng)用模塊發(fā)送的每個(gè)消息訂閱的拉取消息實(shí)體請求后,將獲取到的多個(gè)目標(biāo)消息發(fā)送給所述微前端主應(yīng)用模塊;所述微前端主應(yīng)用模塊,用于接收到所述微應(yīng)用模塊發(fā)送的多個(gè)消息訂閱請求后完成各個(gè)頁面的消息訂閱,基于消息推拉組件向所述后端im服務(wù)模塊發(fā)送對(duì)每個(gè)所述頁面的消息訂閱進(jìn)行拉取消息實(shí)體請求,將獲取到的多個(gè)所述目標(biāo)消息基于消息訂閱的類型分配至相對(duì)應(yīng)的微應(yīng)用模塊的頁面;?所述微應(yīng)用模塊,用于向所述微前端主應(yīng)用模塊發(fā)送各個(gè)頁面的消息訂閱請求,各個(gè)頁面在接收到相對(duì)應(yīng)的目標(biāo)消息后基于預(yù)設(shè)的事件處理邏輯執(zhí)行所述目標(biāo)消息。本方案的有益效果為:通過消息推拉組件可以使得所有微應(yīng)用模塊可以共享同一個(gè)消息通道,從而避免了每個(gè)微應(yīng)用模塊都需要自己實(shí)現(xiàn)消息推送和拉取邏輯的重復(fù)工作,通過集中管理和共享消息推送資源,減少不必要的資源消耗,提高系統(tǒng)整體資源利用效率以及消息推送的效率。
34、為使本技術(shù)的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說明如下。