本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,特別涉及一種基于消息隊(duì)列的事件分配方法及系統(tǒng)。
背景技術(shù):
目前,客戶在前端不同的頁(yè)面咨詢,會(huì)生成不同種類的服務(wù)事件,后臺(tái)通過(guò)定時(shí)服務(wù)去拉取未分配的事件,根據(jù)事件的屬性以及服務(wù)人員的配置,將未分配的事件分配給相應(yīng)的服務(wù)人員?,F(xiàn)有技術(shù)中的這種機(jī)制基本上能夠解決從用戶咨詢到分配服務(wù)人員的這樣一個(gè)需求,但是也存在一些如下的問(wèn)題:
第一、定時(shí)服務(wù)的調(diào)度頻率有限,因此分配事件的實(shí)時(shí)性不是很好,存在一定的延遲,導(dǎo)致客戶體驗(yàn)度受到影響;
第二、定時(shí)調(diào)度服務(wù)是單點(diǎn)調(diào)度,異常停止到重啟的過(guò)程中會(huì)導(dǎo)致整個(gè)分配流程發(fā)生中斷;
第三、調(diào)度服務(wù)是輪循執(zhí)行的,因此不論是否有待分配的事件都會(huì)去進(jìn)行檢查,導(dǎo)致服務(wù)器資源的利用率下降。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題是為了克服現(xiàn)有技術(shù)中定時(shí)調(diào)度服務(wù)存在分配事件的實(shí)時(shí)性差、單點(diǎn)異常會(huì)導(dǎo)致整個(gè)流程中斷以及服務(wù)器資源的利用率低等的缺陷,提供一種基于消息隊(duì)列的事件分配方法及系統(tǒng)。
本發(fā)明是通過(guò)下述技術(shù)方案來(lái)解決上述技術(shù)問(wèn)題的:
一種基于消息隊(duì)列的事件分配方法,其特點(diǎn)在于,包括以下步驟:
S1、根據(jù)輸入至網(wǎng)頁(yè)的內(nèi)容生成事件,并將所述事件的屬性信息存儲(chǔ)至數(shù)據(jù)庫(kù),以及向消息系統(tǒng)的消息隊(duì)列中寫(xiě)入包含所述事件的ID的消息;
S2、所述消息系統(tǒng)將消息隊(duì)列中未消費(fèi)的消息分配至訂閱所述消息的消息消費(fèi)端;
S3、所述消息消費(fèi)端根據(jù)消息中包含的ID從所述數(shù)據(jù)庫(kù)中獲取相應(yīng)事件的屬性信息;
S4、根據(jù)事件的屬性信息將所述事件分配至相應(yīng)的處理人員。
較佳地,在步驟S4之后還包括:在所述事件分配失敗時(shí),返回步驟S2重新分配包含所述事件的ID的消息,直至分配次數(shù)達(dá)到預(yù)設(shè)次數(shù)。
較佳地,在步驟S4之后還包括:在所述事件分配成功時(shí)將包含所述事件的ID的消息設(shè)置為已消費(fèi),并返回步驟S2分配下一條未消費(fèi)的消息。
較佳地,在步驟S4之后還包括:將分配結(jié)果記錄至所述數(shù)據(jù)庫(kù)中;
其中,所述分配結(jié)果包括以下中的至少一種:事件的分配時(shí)間、事件的處理人員、事件的處理狀態(tài)。
較佳地,所述輸入至網(wǎng)頁(yè)的內(nèi)容包括以下中的至少一種:咨詢內(nèi)容、投訴內(nèi)容、建議內(nèi)容;和/或,所述事件的屬性信息包括以下中的至少一種:ID、類型、發(fā)送方、發(fā)送時(shí)間、服務(wù)指標(biāo)時(shí)間、強(qiáng)制分配時(shí)間、預(yù)計(jì)接收組、來(lái)源、目的地。
本發(fā)明還提供一種基于消息隊(duì)列的事件分配系統(tǒng),其特點(diǎn)在于,包括事件生成模塊、消息系統(tǒng)、消息消費(fèi)端以及事件分配模塊;
所述事件生成模塊用于根據(jù)輸入至網(wǎng)頁(yè)的內(nèi)容生成事件,并將所述事件的屬性信息存儲(chǔ)至數(shù)據(jù)庫(kù),以及向所述消息系統(tǒng)的消息隊(duì)列中寫(xiě)入包含所述事件的ID的消息;
所述消息系統(tǒng)用于將消息隊(duì)列中未消費(fèi)的消息分配至訂閱所述消息的消息消費(fèi)端;
所述消息消費(fèi)端用于根據(jù)消息中包含的ID從所述數(shù)據(jù)庫(kù)中獲取相應(yīng)事件的屬性信息,并調(diào)用所述事件分配模塊;
所述事件分配模塊用于根據(jù)事件的屬性信息將所述事件分配至相應(yīng)的處理人員。
較佳地,所述消息消費(fèi)端與所述事件分配模塊部署于同一集群中。
較佳地,在所述事件分配模塊分配失敗時(shí),調(diào)用所述消息系統(tǒng)以重新分配包含所述事件的ID的消息,直至分配次數(shù)達(dá)到預(yù)設(shè)次數(shù)。
較佳地,所述事件分配系統(tǒng)還包括設(shè)置模塊,用于在所述事件分配模塊分配成功時(shí)將包含所述事件的ID的消息設(shè)置為已消費(fèi),并調(diào)用所述消息系統(tǒng)以分配下一條未消費(fèi)的消息。
較佳地,所述事件分配系統(tǒng)還包括記錄模塊,用于將分配結(jié)果記錄至所述數(shù)據(jù)庫(kù)中;
其中,所述分配結(jié)果包括以下中的至少一種:事件的分配時(shí)間、事件的處理人員、事件的處理狀態(tài)。
在符合本領(lǐng)域常識(shí)的基礎(chǔ)上,上述各優(yōu)選條件,可任意組合,即得本發(fā)明各較佳實(shí)例。
本發(fā)明的積極進(jìn)步效果在于:與現(xiàn)有技術(shù)相比,本發(fā)明將消息系統(tǒng)與事件系統(tǒng)相結(jié)合,利用消息生成/訂閱機(jī)制,實(shí)現(xiàn)了事件從生成到分配的過(guò)程,保證了事件分配的實(shí)時(shí)性,同時(shí)單點(diǎn)異常不會(huì)影響整個(gè)分配流程,服務(wù)器資源的利用率也大大提高。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例的一種基于消息隊(duì)列的事件分配方法的流程圖。
圖2為本發(fā)明實(shí)施例的一種基于消息隊(duì)列的事件分配系統(tǒng)的結(jié)構(gòu)框圖。
圖3為本發(fā)明實(shí)施例的事件分配系統(tǒng)執(zhí)行事件分配方法的整體架構(gòu)圖。
具體實(shí)施方式
下面通過(guò)實(shí)施例的方式進(jìn)一步說(shuō)明本發(fā)明,但并不因此將本發(fā)明限制在所述的實(shí)施例范圍之中。
本發(fā)明的應(yīng)用場(chǎng)景為用戶在前端頁(yè)面操作咨詢服務(wù)(也可以為投訴服務(wù)或建議服務(wù)等)時(shí),計(jì)算機(jī)后臺(tái)根據(jù)用戶的基本信息(例如注冊(cè)賬號(hào)等信息)以及咨詢內(nèi)容(也可以為投訴內(nèi)容或建議內(nèi)容等)生成事件,并將所述事件分配給相應(yīng)的處理人員,以處理用戶的咨詢內(nèi)容,例如回答問(wèn)題、做出建議等。
本實(shí)施例提供一種基于消息隊(duì)列的事件分配方法,如圖1所示,包括以下步驟:
步驟101、根據(jù)輸入至網(wǎng)頁(yè)的內(nèi)容生成事件,并將所述事件的屬性信息存儲(chǔ)至數(shù)據(jù)庫(kù),以及向消息系統(tǒng)的消息隊(duì)列中寫(xiě)入包含所述事件的ID(唯一標(biāo)識(shí))的消息。本實(shí)施例中的消息系統(tǒng)可以為現(xiàn)有技術(shù)中的消息系統(tǒng),例如Kafka(一種分布式發(fā)布-訂閱消息系統(tǒng))。
其中,事件的屬性信息中包括事件的ID,還可以包括類型、發(fā)送方、發(fā)送時(shí)間、服務(wù)指標(biāo)時(shí)間、強(qiáng)制分配時(shí)間、預(yù)計(jì)接收組、來(lái)源、目的地。
步驟102、所述消息系統(tǒng)將消息隊(duì)列中未消費(fèi)的消息分配至訂閱所述消息的消息消費(fèi)端。當(dāng)有新消息時(shí),消息系統(tǒng)會(huì)從訂閱所述消息的所有消息消費(fèi)端中選擇一個(gè)消息消費(fèi)端,并向其分配新消息。
步驟103、所述消息消費(fèi)端根據(jù)消息中包含的ID從所述數(shù)據(jù)庫(kù)中獲取相應(yīng)事件的屬性信息;
步驟104、根據(jù)事件的屬性信息將所述事件分配至相應(yīng)的處理人員。
本方案中,可以預(yù)先為不同的應(yīng)用場(chǎng)景分別定義咨詢類型事件Code,在事件系統(tǒng)中,為每個(gè)Code指定特定的服務(wù)人群。步驟104中分配事件的原則可以為指定分配、關(guān)聯(lián)分配或非關(guān)聯(lián)分配。
指定分配是指由事件發(fā)起方指定處理人員。
關(guān)聯(lián)分配是指如果事件類型設(shè)置了關(guān)聯(lián)分配,則會(huì)把同一類型同一用戶ID的事件優(yōu)先分配給之前處理過(guò)同一類型同一用戶ID的處理人員,如果之前沒(méi)有處理人員處理過(guò),則按照非關(guān)聯(lián)分配原則分配。
非關(guān)聯(lián)分配是指如果事件類型設(shè)置了非關(guān)聯(lián)分配,則會(huì)分配給正在處理事件數(shù)最少的處理人員,如果正在處理事件數(shù)最少的處理人員有多個(gè),再?gòu)闹羞x取今日完成事件數(shù)最少的處理人員,如果這樣的處理人員還存在多個(gè),那么隨機(jī)分配給其中一個(gè)處理人員。
在可選的一種實(shí)施方式中,步驟104之后還包括以下步驟:
在所述事件分配失敗時(shí),返回步驟102重新分配包含所述事件的ID的消息,直至分配次數(shù)達(dá)到預(yù)設(shè)次數(shù)。
本實(shí)施例中,若事件未成功分配至相應(yīng)的處理人員,則事件分配失敗,即消息消費(fèi)失敗,可以通過(guò)在消息系統(tǒng)中配置消息消費(fèi)失敗重試次數(shù),即預(yù)設(shè)次數(shù),例如可以設(shè)置為1~5次,重新返回消息系統(tǒng)向消息消費(fèi)端分配消息的步驟,直至分配次數(shù)達(dá)到預(yù)設(shè)次數(shù)為止。
在可選的一種實(shí)施方式中,步驟104之后還包括以下步驟:
在所述事件分配成功時(shí)將包含所述事件的ID的消息設(shè)置為已消費(fèi),并返回步驟102分配下一條未消費(fèi)的消息。
在可選的一種實(shí)施方式中,步驟104之后還包括以下步驟:
將分配結(jié)果記錄至所述數(shù)據(jù)庫(kù)中;
其中,所述分配結(jié)果包括以下中的至少一種:事件的分配時(shí)間、事件的處理人員、事件的處理狀態(tài)(從未分配變?yōu)橐逊峙?。
圖2為本發(fā)明實(shí)施例提供的一種基于消息隊(duì)列的事件分配系統(tǒng)的結(jié)構(gòu)框圖。其中,基于消息隊(duì)列的事件分配系統(tǒng)20包括事件生成模塊21、消息系統(tǒng)22、消息消費(fèi)端23以及事件分配模塊24。下面對(duì)各個(gè)模塊的功能進(jìn)行簡(jiǎn)單介紹。
所述事件生成模塊用于根據(jù)輸入至網(wǎng)頁(yè)的內(nèi)容生成事件,并將所述事件的屬性信息存儲(chǔ)至數(shù)據(jù)庫(kù),以及向所述消息系統(tǒng)的消息隊(duì)列中寫(xiě)入包含所述事件的ID的消息。
所述消息系統(tǒng)用于將消息隊(duì)列中未消費(fèi)的消息分配至訂閱所述消息的消息消費(fèi)端。
所述消息消費(fèi)端用于根據(jù)消息中包含的ID從所述數(shù)據(jù)庫(kù)中獲取相應(yīng)事件的屬性信息,并調(diào)用所述事件分配模塊。
所述事件分配模塊用于根據(jù)事件的屬性信息將所述事件分配至相應(yīng)的處理人員。
在可選的一種實(shí)施方式中,所述消息消費(fèi)端與所述事件分配模塊部署于同一集群中。
在可選的一種實(shí)施方式中,將上述事件生成模塊封裝成SOA(面向服務(wù)的架構(gòu))服務(wù),即事件生成服務(wù);將上述事件分配模塊封裝成SOA服務(wù),即事件分配服務(wù)。如圖3所示,事件生成服務(wù)根據(jù)輸入至網(wǎng)頁(yè)的內(nèi)容生成事件,并將所述事件的屬性信息存儲(chǔ)至MYSQL(關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)),MYSQL向事件生成服務(wù)返回事件的ID。事件生成服務(wù)還向消息系統(tǒng)的消息隊(duì)列中寫(xiě)入消息,消息系統(tǒng)返回寫(xiě)入是否成功的結(jié)果。其中,寫(xiě)入的消息中包含所述事件的ID。消息系統(tǒng)向訂閱所述消息的消息消費(fèi)端分配消息,消息消費(fèi)端返回是否成功接收的結(jié)果。消息消費(fèi)端根據(jù)事件的ID從MYSQL中獲取所述事件的屬性信息,并在接收到MYSQL的返回結(jié)果為成功獲取時(shí)調(diào)用事件分配服務(wù)。事件分配服務(wù)獲取相應(yīng)的處理人員,并向其分配所述事件。事件分配結(jié)束時(shí),將分配結(jié)果記錄在MYSQL中。事件分配服務(wù)在事件分配成功后,向IM(即時(shí)通信系統(tǒng))發(fā)起會(huì)話,以使得用戶與處理人員可以直接溝通,IM向事件分配服務(wù)返回是否成功發(fā)起會(huì)話的結(jié)果。
與現(xiàn)有技術(shù)中的定時(shí)調(diào)度服務(wù)相比,本實(shí)施例中的事件分配方法及系統(tǒng)通過(guò)將消息系統(tǒng)與事件系統(tǒng)相結(jié)合,利用消息生成/訂閱機(jī)制,實(shí)現(xiàn)了事件從生成到分配的過(guò)程,并將整個(gè)過(guò)程縮短至200毫秒以內(nèi),保證了事件分配的實(shí)時(shí)性,同時(shí)單點(diǎn)異常不會(huì)影響整個(gè)分配流程,服務(wù)器資源的利用率也大大提高。
雖然以上描述了本發(fā)明的具體實(shí)施方式,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說(shuō)明,本發(fā)明的保護(hù)范圍是由所附權(quán)利要求書(shū)限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實(shí)質(zhì)的前提下,可以對(duì)這些實(shí)施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護(hù)范圍。