本申請屬于計(jì)算機(jī)通信信息處理領(lǐng)域,尤其涉及一種消息處理方法、裝置及系統(tǒng)。
背景技術(shù):
伴隨著互聯(lián)網(wǎng)在快速發(fā)展,許多領(lǐng)域中互聯(lián)網(wǎng)應(yīng)用的服務(wù)器訪問量呈明顯上升趨勢。服務(wù)器上的業(yè)務(wù)系統(tǒng)需要具有一定的業(yè)務(wù)處理能力,對訪問服務(wù)器的調(diào)用方的消息進(jìn)行快速、準(zhǔn)確處理。
一般的,在服務(wù)器業(yè)務(wù)系統(tǒng)被調(diào)用時(shí),系統(tǒng)的處理能力總是有限的,而調(diào)用方需要在被調(diào)用方系統(tǒng)中處理的業(yè)務(wù)消息的數(shù)量和所述業(yè)務(wù)消息的產(chǎn)生時(shí)間不是固定的。如一個(gè)或多個(gè)調(diào)用方在短時(shí)間內(nèi)幾乎同時(shí)輸出多個(gè)業(yè)務(wù)消息訪問被調(diào)用方,會對被調(diào)用方產(chǎn)生短暫的沖擊。如果訪問量過大、經(jīng)常性的突發(fā)性業(yè)務(wù)甚至還會導(dǎo)致被調(diào)用方業(yè)務(wù)系統(tǒng)的消息阻塞、系統(tǒng)崩潰等嚴(yán)重后果。為保障被調(diào)用方業(yè)務(wù)系統(tǒng)的穩(wěn)定運(yùn)行,現(xiàn)有技術(shù)中通常采用并發(fā)控制機(jī)制控制被調(diào)用方的業(yè)務(wù)處理流量。
所述的并發(fā)控制機(jī)制通常是指在系統(tǒng)間調(diào)用時(shí),設(shè)置調(diào)用方與被調(diào)用方可保持的最大并發(fā)鏈接數(shù),當(dāng)出現(xiàn)新的鏈接請求時(shí)發(fā)現(xiàn)當(dāng)前鏈接數(shù)已經(jīng)超過設(shè)置的最大并發(fā)鏈接數(shù)時(shí)則拒絕創(chuàng)建新的鏈接。但在一些應(yīng)用場景如集群模式下多個(gè)調(diào)用方訪問被調(diào)用方時(shí),雖然采用了并發(fā)機(jī)制控制所述調(diào)用方與被調(diào)用方可保持的最大并發(fā)鏈接數(shù),但調(diào)用方為了爭奪單位時(shí)間內(nèi)的業(yè)務(wù)消息發(fā)送機(jī)會很容易造成請求失敗而需要不停的重復(fù)請求發(fā)送,而調(diào)用方有新的業(yè)務(wù)消息產(chǎn)生時(shí)又會去業(yè)務(wù)節(jié)點(diǎn)申請發(fā)送?,F(xiàn)有的并發(fā)控制機(jī)制主要是根據(jù)被調(diào)用方的業(yè)務(wù)處理能力在計(jì)數(shù)控制節(jié)點(diǎn)控制被調(diào)用方處理的業(yè)務(wù)流量,對調(diào)用方的業(yè)務(wù)消息輸出沒有限制。而調(diào)用方尤其是所述集群模式下高并發(fā)情況下可以以不同的頻率輸出業(yè)務(wù)消息,這些業(yè)務(wù)消息產(chǎn)生后都需要統(tǒng)一去所述計(jì)數(shù)控制節(jié)點(diǎn)進(jìn)行消息發(fā)送處理,這樣無疑對計(jì)數(shù)控制節(jié)點(diǎn)造成較大負(fù)擔(dān),造成單節(jié)點(diǎn)業(yè)務(wù)消息的處理的性能瓶頸問題,降低整個(gè)消息的處理效率。
所述集群模式下,如果所述調(diào)用方的業(yè)務(wù)系統(tǒng)是一個(gè)批次里的每筆流水都需要訪問被調(diào)用方系統(tǒng)的應(yīng)用場景,那么往往就會存在多筆流水(例如等于并發(fā)數(shù)100)幾乎同時(shí)訪問被調(diào)用方系統(tǒng),而后處理后又幾乎同時(shí)釋放。實(shí)際的應(yīng)用場景中不同的調(diào)用方可以在不同的時(shí)間段產(chǎn)生高并發(fā)業(yè)務(wù)消息,有的時(shí)候會多個(gè)調(diào)用方在相同或者臨近時(shí)間段并發(fā),有的時(shí)候也會 全部空閑。這樣會導(dǎo)致系統(tǒng)運(yùn)行性能呈現(xiàn)波浪式或者尖刺,不利于調(diào)用方系統(tǒng)的穩(wěn)定運(yùn)行。
現(xiàn)有技術(shù)中采用的在調(diào)用方和被調(diào)用方之間設(shè)置的并發(fā)控制機(jī)制不能對調(diào)用方系統(tǒng)的消息輸出進(jìn)行控制,降低了被調(diào)用系統(tǒng)的穩(wěn)定運(yùn)行性能。在一些應(yīng)用場景中如集群模式下還降低了計(jì)數(shù)控制節(jié)點(diǎn)的業(yè)務(wù)消息處理性能。
技術(shù)實(shí)現(xiàn)要素:
本申請目的在于提供一種消息處理方法、裝置及系統(tǒng),可以使調(diào)用方平穩(wěn)、均勻的輸出業(yè)務(wù)消息,提高被調(diào)用方系統(tǒng)運(yùn)行的穩(wěn)定性,提升被調(diào)用方或者鏈接控制節(jié)點(diǎn)的業(yè)務(wù)消息處理性能和效率。本申請所述的消息處理方法和裝置可以在不超過被調(diào)用方系統(tǒng)最大業(yè)務(wù)處理能力的情況下,最大化的利用被調(diào)用方的業(yè)務(wù)處理能力,提高資源使用效率。
本申請?zhí)峁┑囊环N消息處理方法、裝置及系統(tǒng)是這樣實(shí)現(xiàn)的:
一種消息處理方法,所述方法包括:
調(diào)用方計(jì)算發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)長,根據(jù)所述發(fā)送時(shí)長向控制節(jié)點(diǎn)申請占用時(shí)間段;
所述控制節(jié)點(diǎn)在收到調(diào)用方的所述占用時(shí)間段的申請消息后,根據(jù)預(yù)定規(guī)則確定所述調(diào)用方占用時(shí)間段的申請結(jié)果,并將所述申請結(jié)果反饋給相應(yīng)的調(diào)用方;
所述調(diào)用方在接收到的所述占用時(shí)間段的申請結(jié)果為成功時(shí),計(jì)算所述業(yè)務(wù)消息的發(fā)送時(shí)間;
所述調(diào)用方在監(jiān)測到超過所述業(yè)務(wù)消息的發(fā)送時(shí)間時(shí),向所述控制節(jié)點(diǎn)申請所述業(yè)務(wù)消息的發(fā)送令牌;
所述控制節(jié)點(diǎn)在收到調(diào)用方的所述發(fā)送令牌的申請消息后,根據(jù)是否達(dá)到被調(diào)用方的最大業(yè)務(wù)處理能力確定所述調(diào)用方發(fā)送令牌的申請結(jié)果,并將所述申請結(jié)果反饋給相應(yīng)的調(diào)用方;
所述調(diào)用方在接收到的所述業(yè)務(wù)消息的發(fā)送令牌申請結(jié)果為成功時(shí),發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
一種消息處理方法,所述方法包括:
計(jì)算發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)長,根據(jù)所述發(fā)送時(shí)長發(fā)送申請占用時(shí)間段的第一申請消息;
在接收到的所述占用時(shí)間段的申請結(jié)果為成功時(shí),計(jì)算所述業(yè)務(wù)消息的發(fā)送時(shí)間;
監(jiān)測當(dāng)前時(shí)間是否超過所述業(yè)務(wù)消息的發(fā)送時(shí)間;在監(jiān)測到超過所述發(fā)送時(shí)間時(shí),發(fā)送申請所述業(yè)務(wù)消息的發(fā)送令牌的第二申請消息;
在接收到的所述發(fā)送令牌的申請結(jié)果為成功時(shí),發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
一種消息處理方法,所述方法包括:
接收申請占用時(shí)間段和發(fā)送令牌的申請消息;
根據(jù)預(yù)定規(guī)則確定占用時(shí)間段的申請結(jié)果,發(fā)送所述占用時(shí)間段的申請結(jié)果;
根據(jù)是否達(dá)到被調(diào)用方的最大業(yè)務(wù)處理能力確定所述發(fā)送令牌的申請結(jié)果,發(fā)送所述發(fā)送令牌的申請結(jié)果。
一種消息處理裝置,所述裝置包括:
計(jì)算模塊,用于計(jì)算發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)長,并基于所述發(fā)送時(shí)長計(jì)算發(fā)送業(yè)務(wù)消息的占用時(shí)間段;
時(shí)間段申請模塊,用于發(fā)送申請所述占用時(shí)間段的第一申請消息;
接收模塊,用于接收占用時(shí)間段和發(fā)送令牌的申請結(jié)果的消息;
發(fā)送時(shí)間計(jì)算模塊,用于基于接收到的所述占用時(shí)間段的申請結(jié)果為成功的消息計(jì)算業(yè)務(wù)消息的發(fā)送時(shí)間;
令牌申請模塊,用于監(jiān)測當(dāng)前時(shí)間是否超過所述業(yè)務(wù)消息的發(fā)送時(shí)間;在監(jiān)測到超過所述發(fā)送時(shí)間時(shí),發(fā)送申請所述業(yè)務(wù)消息的發(fā)送令牌的第二申請消息;
發(fā)送模塊,用于基于接收到的所述發(fā)送令牌的申請結(jié)果為成功的消息發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
一種消息處理裝置,所述裝置包括:
申請消息接收模塊,用于接收包括占用時(shí)間段的申請消息;還用于接收發(fā)送令牌的申請消息;
占用時(shí)間分配模塊,用于根據(jù)預(yù)定規(guī)則為所述申請消息中的占用時(shí)間段分配業(yè)務(wù)消息的占用時(shí)間段;
令牌分配模塊,用于根據(jù)被調(diào)用方當(dāng)前的業(yè)務(wù)流量和最大業(yè)務(wù)處理能力分配發(fā)送令牌;
申請結(jié)果發(fā)送模塊,用于發(fā)送所述占用時(shí)間段申請結(jié)果的消息;還用于發(fā)送所述發(fā)送令牌申請結(jié)果的消息。
一種消息處理系統(tǒng),所述系統(tǒng)包括:
消息客戶端,用于向控制端發(fā)送基于包括發(fā)送時(shí)長設(shè)置的占用時(shí)間段的第一申請消息;還用于基于接收到的所述占用時(shí)間段的申請結(jié)果為成功的消息計(jì)算業(yè)務(wù)消息的發(fā)送時(shí)間;還用于監(jiān)測當(dāng)前時(shí)間是否超過所述業(yè)務(wù)消息的發(fā)送時(shí)間,并在監(jiān)測到超過所述發(fā)送時(shí)間時(shí)向所述控制端發(fā)送申請所述業(yè)務(wù)消息的發(fā)送令牌的第二申請消息;還用于基于接收到的所述發(fā)送 令牌的申請結(jié)果為成功的消息發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
控制端,用于接收消息客戶端發(fā)送的所述第一申請消息和所述第二申請消息;還用于根據(jù)預(yù)定規(guī)則為所述第一申請消息中的占用時(shí)間段分配業(yè)務(wù)消息的占用時(shí)間段;還用于根據(jù)被調(diào)用方當(dāng)前的業(yè)務(wù)流量和最大業(yè)務(wù)處理能力為所述第二申請消息中的業(yè)務(wù)消息分配發(fā)送令牌;還用于將所述第一申請消息和第二申請消息的申請結(jié)果發(fā)送給所述消息客戶端。
本申請?zhí)峁┑囊环N消息處理方法、裝置及系統(tǒng),可以通過為業(yè)務(wù)消息申請占用時(shí)間段,并對每條業(yè)務(wù)消息設(shè)置相應(yīng)的發(fā)送時(shí)間,在申請到發(fā)送令牌后才可以發(fā)送業(yè)務(wù)消息。這樣,可以對調(diào)用方業(yè)務(wù)消息的進(jìn)行輸出控制,實(shí)現(xiàn)均勻平穩(wěn)的輸出業(yè)務(wù)消息,可以提高被調(diào)用方系統(tǒng)運(yùn)行的穩(wěn)定性。在本申請中可以在不超過被調(diào)用方最大業(yè)務(wù)處理能力的情況下,調(diào)用方可以最大化的輸出業(yè)務(wù)消息,充分利用被調(diào)用方系統(tǒng)的最大處理能力,提高系統(tǒng)資源利用率。同時(shí)由于對所述調(diào)用方的輸出控制,可以避免集群模式下性能單點(diǎn)和瓶頸問題。
附圖說明
為了更清楚地說明本申請實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實(shí)施例,對于本鄰域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請一種消息處理方法一種實(shí)施例的流程示意圖;
圖2是本申請一種消息處理方法一種實(shí)施例的流程示意圖;
圖3是本申請一種消息處理方法另一種實(shí)施例的流程示意圖;
圖4是本申請一種消息處理方法另一種實(shí)施例的流程示意圖;
圖5是本申請一種消息處理方法一種實(shí)施例的流程示意圖;
圖6是本申請一種消息處理方法另一種實(shí)施例的流程示意圖;
圖7是本申請一種消息處理方法另一種實(shí)施例的流程示意圖;
圖8是本申請一種消息處理裝置一種實(shí)施例的模塊結(jié)構(gòu)示意圖;
圖9是本申請所述消息處理裝置中計(jì)算模塊一種實(shí)施例的模塊結(jié)構(gòu)示意圖;
圖10是本申請所述消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖;
圖11是本申請所述消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖;
圖12是本申請所述消息處理裝置一種實(shí)施例的模塊結(jié)構(gòu)示意圖;
圖13是本申請所述消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖;
圖14是本申請所述消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖;
圖15是本申請一種消息處理系統(tǒng)的模塊結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本技術(shù)鄰域的人員更好地理解本申請中的技術(shù)方案,下面將結(jié)合本申請實(shí)施例中的附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾堉械膶?shí)施例,本鄰域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請保護(hù)的范圍。
本申請可以以集群模式下調(diào)用方和被調(diào)用方之間的消息傳遞為應(yīng)用場景進(jìn)行說明。當(dāng)然,本申請所述的消息處理方法不局限于所述集群模式下的調(diào)用方與被調(diào)用方的消息交互,其他的多個(gè)終端或者同一終端上的不同應(yīng)用之間的消息交互的應(yīng)用場景仍然可以適用本申請所述的消息處理方法。所述的集群通??梢灾敢唤M相互獨(dú)立的、通過網(wǎng)絡(luò)互聯(lián)的計(jì)算機(jī)。這些計(jì)算機(jī)構(gòu)成了一個(gè)組,可以為分布式的網(wǎng)絡(luò)工作組。所述的集群中的一個(gè)或者多個(gè)或者全部計(jì)算機(jī)可以作為服務(wù)器對外開放業(yè)務(wù),向所述集群外的計(jì)算機(jī)進(jìn)行信息交互。在一些應(yīng)用場景中,所述集群中的多個(gè)計(jì)算機(jī)可以作為調(diào)用方向所述集群中的其他計(jì)算機(jī)發(fā)送業(yè)務(wù)消息進(jìn)行處理,此時(shí),所述接收業(yè)務(wù)消息的集群中的其他計(jì)算機(jī)可以作為被調(diào)用方進(jìn)行相應(yīng)的響應(yīng)。
需要說明的是,本申請方法中所述的調(diào)用方、被調(diào)用方等可以為所述集群模式下的計(jì)算機(jī)終端,也可以為終端上的應(yīng)用,或者也可以為終端上的功能模塊。下面結(jié)合附圖以集群模式下的多個(gè)服務(wù)器終端為例對本申請所述的消息處理方法進(jìn)行詳細(xì)的說明。圖1是本申請所述一種消息處理方法一種實(shí)施例的方法流程圖。如圖1所示,所述方法可以包括:
S1:調(diào)用方計(jì)算發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)長,根據(jù)所述發(fā)送時(shí)長向控制節(jié)點(diǎn)申請占用時(shí)間段。
所述調(diào)用方在產(chǎn)生流水業(yè)務(wù)需要發(fā)送業(yè)務(wù)消息時(shí),可以計(jì)算發(fā)送完所述業(yè)務(wù)消息所需要的發(fā)送時(shí)間。一般的,所述調(diào)用方產(chǎn)生業(yè)務(wù)消息通??梢园óa(chǎn)生屬于同一批次或者同一業(yè)務(wù)流水(如周期采集匯總的訂單消息)的多個(gè)業(yè)務(wù)消息,這些業(yè)務(wù)消息通常需要在相對集中的時(shí)間段內(nèi)訪問被調(diào)用方。所述調(diào)用方可以根據(jù)單個(gè)業(yè)務(wù)消息的發(fā)送間隔計(jì)算發(fā)送完所述調(diào)用方某個(gè)批次下所有業(yè)務(wù)消息所述需要的發(fā)送時(shí)長。當(dāng)然,所述調(diào)用方也可以不按照所述批次或者業(yè)務(wù)流水發(fā)送業(yè)務(wù)消息,在一些應(yīng)用場景中也可以發(fā)送當(dāng)前調(diào)用方中所有的待發(fā)送業(yè)務(wù)消息,或者周期性的掃描后發(fā)送當(dāng)前所有的待發(fā)送業(yè)務(wù)消息。
如上所述,所述發(fā)送時(shí)長可以根據(jù)單個(gè)業(yè)務(wù)消息的發(fā)送間隔進(jìn)行計(jì)算,如調(diào)用方需要發(fā) 送100條業(yè)務(wù)消息,每個(gè)間隔10毫秒發(fā)送一條業(yè)務(wù)消息。那么,計(jì)算得到的所述發(fā)送時(shí)長可以為990毫秒。在計(jì)算完所述發(fā)送時(shí)長后,可以根據(jù)所述發(fā)送時(shí)長向控制節(jié)點(diǎn)申請發(fā)送所述業(yè)務(wù)消息需要的占用時(shí)間段。具體的,所述根據(jù)所述發(fā)送時(shí)長向控制節(jié)點(diǎn)申請占用時(shí)間段可以包括:
S101:獲取控制節(jié)點(diǎn)的最新占用時(shí)刻,向所述控制節(jié)點(diǎn)發(fā)送以所述獲取的最新占用時(shí)刻加上所述發(fā)送時(shí)長作為所述占用時(shí)間段的第一申請消息。
所述的控制節(jié)點(diǎn)通常可以包括為保障與被調(diào)用方建立的并發(fā)鏈接數(shù)不超過設(shè)置的最大并發(fā)鏈接數(shù)而設(shè)置的數(shù)據(jù)處理功能模塊,可以包括數(shù)據(jù)庫或者控制單元。本申請中所述的控制節(jié)點(diǎn)可以包括分布式計(jì)數(shù)節(jié)點(diǎn),具體的例如可以采用Tair或者memcache等。所述的控制節(jié)點(diǎn)可以設(shè)置在被調(diào)用方的業(yè)務(wù)消息接入接口中,也可以設(shè)置在調(diào)用方統(tǒng)一的消息輸出接口或者作為單獨(dú)的服務(wù)單元控制調(diào)用方的消息發(fā)送。本實(shí)施例中可以采用將所述控制節(jié)點(diǎn)作為單獨(dú)的服務(wù)單元,所述調(diào)用方需要發(fā)送業(yè)務(wù)消息時(shí)可以先向所述控制節(jié)點(diǎn)進(jìn)行申請發(fā)送資源,由控制節(jié)點(diǎn)根據(jù)網(wǎng)絡(luò)資源、調(diào)用方或者被調(diào)用方的業(yè)務(wù)狀態(tài)等為調(diào)用方分配資源。
所述的控制節(jié)點(diǎn)中通常需要設(shè)置占用時(shí)刻的信息。所述的占用時(shí)刻可以表示為所述控制節(jié)點(diǎn)在所述占用時(shí)刻之前的時(shí)間已經(jīng)分配占用,所在占用時(shí)刻后面的時(shí)間可以申請占用。每次占用時(shí)間段分配后可以更新占用時(shí)刻,以保障提供的為正確、及時(shí)的最新占用時(shí)刻。例如當(dāng)前時(shí)刻為0秒,所述占用時(shí)刻為100秒,可以表示為在當(dāng)前時(shí)刻0秒至所述占用時(shí)刻100秒的時(shí)間內(nèi)不能申請發(fā)送業(yè)務(wù)消息,所述調(diào)用方可以在所述占用時(shí)刻100秒后申請發(fā)送業(yè)務(wù)消息的占用時(shí)間段。因此,本實(shí)施例中可以獲取所述控制節(jié)點(diǎn)的最新占用時(shí)刻T0,以所述最新占用時(shí)刻加上所述計(jì)算得到的發(fā)送時(shí)長TL作為該調(diào)用方發(fā)送所述業(yè)務(wù)消息需要占用時(shí)間段。然后可以向所述控制節(jié)點(diǎn)發(fā)送第一申請消息,所述第一申請消息中可以包括上述T0+TL的占用時(shí)間段請求信息。
當(dāng)然,所述調(diào)用方在申請所述占用時(shí)間段失敗時(shí),例如申請的占用時(shí)間段為100秒至110秒(獲取的占用時(shí)刻100秒+發(fā)送時(shí)長10秒)的時(shí)間段被其他調(diào)用方先申請占用了到了105秒的時(shí)刻,此時(shí)所述調(diào)用方可以獲取最新的占用時(shí)刻105秒,然后根據(jù)所述最新的占用時(shí)刻105秒繼續(xù)向控制節(jié)點(diǎn)發(fā)送占用時(shí)間段為105秒至115秒(獲取的最新占用時(shí)刻105秒+發(fā)送時(shí)長10秒)的第一申請消息。
調(diào)用方可以計(jì)算發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)長,并可以根據(jù)所述發(fā)送時(shí)長向控制節(jié)點(diǎn)申請占用時(shí)間段。
S2:所述控制節(jié)點(diǎn)在收到調(diào)用方的所述占用時(shí)間段的申請消息后,根據(jù)預(yù)定規(guī)則確定所 述調(diào)用方占用時(shí)間段的申請結(jié)果,并將所述申請結(jié)果反饋給相應(yīng)的調(diào)用方。
所述控制節(jié)點(diǎn)例如TAIR計(jì)數(shù)節(jié)點(diǎn)可以為發(fā)送時(shí)間資源分配的處理單元。所述控制節(jié)點(diǎn)收到一個(gè)或者多個(gè)調(diào)用方發(fā)送來的申請占用時(shí)間段的一個(gè)或者多個(gè)申請消息,可以根據(jù)設(shè)置的預(yù)定規(guī)則進(jìn)行處理,確定一個(gè)或者多個(gè)調(diào)用方占用時(shí)間段的申請結(jié)果。一般的,所述控制節(jié)點(diǎn)的最新占用時(shí)刻可以為對所有調(diào)用方公開的信息,多個(gè)調(diào)用方可以根據(jù)公開的所述最新占用時(shí)刻申請占用時(shí)間段。所述控制節(jié)點(diǎn)在接收到多個(gè)根據(jù)最新的占用時(shí)刻發(fā)送的占用時(shí)間段申請消息時(shí),可以采取優(yōu)先處理最先接收到的申請消息的預(yù)定規(guī)則,將所述最新的占用時(shí)刻后面的發(fā)送時(shí)間分配給最新接收到的申請消息的調(diào)用方。相應(yīng)的,在所述最新接收到的申請消息的調(diào)用方申請占用時(shí)間段成功后,其他同樣根據(jù)上述申請成功的最新占用時(shí)刻發(fā)送的申請消息則申請失敗。所述控制節(jié)點(diǎn)可以將所述調(diào)用方的申請結(jié)果反饋給相應(yīng)的調(diào)用方。
具體的應(yīng)用場景中,例如三個(gè)調(diào)用方C1、C2、C3獲取的最新占用時(shí)刻為100秒,分別向所述控制節(jié)點(diǎn)申請占用時(shí)間段為(100至110)秒、(100至130)秒、(100至115)秒。所述控制節(jié)點(diǎn)先接收到調(diào)用方C1的占用時(shí)間段申請消息,然后將100至110秒的時(shí)間資源分配給調(diào)用方C1使用,那么所述調(diào)用方C占用時(shí)間段的申請結(jié)果為申請成功。此時(shí),所述控制節(jié)點(diǎn)可以根據(jù)最近C1申請消息的數(shù)量將最新占用時(shí)刻100秒更新為110秒。與此同時(shí),所述控制節(jié)點(diǎn)接收到調(diào)用方C2、C3的申請消息后,發(fā)現(xiàn)根據(jù)獲取的占用時(shí)刻為100秒申請的占用時(shí)間段已經(jīng)被占用,則申請結(jié)果為申請失敗。所述調(diào)用方C2、C3可以獲取最新的占用時(shí)刻為110秒,然后可以根據(jù)最新的占用時(shí)刻110秒重新向所述控制節(jié)點(diǎn)申請占用時(shí)間段。
上述實(shí)施例為集群模式下控制節(jié)點(diǎn)對申請消息處理的應(yīng)用場景。當(dāng)然,所述的處理調(diào)用方占用時(shí)間段申請的預(yù)定規(guī)則也可以根據(jù)其他應(yīng)用場景或者需求進(jìn)行設(shè)置。例如,可以根據(jù)占用時(shí)間段申請消息的優(yōu)先級優(yōu)先處理優(yōu)先級別高的申請消息,或者處理先接收到的申請消息等,在處理的申請消息中的占用時(shí)間段沒有被占用時(shí)為其分配時(shí)間段。
所述控制節(jié)點(diǎn)在收到調(diào)用方的所述占用時(shí)間段的申請消息后,根據(jù)預(yù)定規(guī)則確定所述調(diào)用方占用時(shí)間段的申請結(jié)果;所述控制節(jié)點(diǎn)將所述申請結(jié)果反饋給相應(yīng)的調(diào)用方。
S3:所述調(diào)用方在接收到的所述占用時(shí)間段的申請結(jié)果為成功時(shí),計(jì)算所述業(yè)務(wù)消息的發(fā)送時(shí)間。
所述調(diào)用方如果接收到的所述控制節(jié)點(diǎn)反饋的申請結(jié)果為所述占用時(shí)間段的占用時(shí)間申請成功,則可以調(diào)用方當(dāng)前要發(fā)送批次中每條業(yè)務(wù)消息的發(fā)送時(shí)間。如申請的占用時(shí)間段為100秒至110秒,在所述占用時(shí)間段內(nèi)需要發(fā)送100條業(yè)務(wù)消息,每條消息發(fā)送時(shí)間為100毫秒,則可以計(jì)算第一條業(yè)務(wù)消息的發(fā)送時(shí)間為100秒、第二條業(yè)務(wù)消息的發(fā)送時(shí)間為100.1 秒、…、第100條業(yè)務(wù)消息的發(fā)送時(shí)間為109.9秒。
所述調(diào)用方計(jì)算完每條業(yè)務(wù)消息的發(fā)送時(shí)間,然后可以存放入本地的消息發(fā)送隊(duì)列中。一般的,所述發(fā)送隊(duì)列可以為采用根據(jù)存入先后順序設(shè)定發(fā)送優(yōu)先級的?;蜻M(jìn)程等數(shù)據(jù)存儲、處理單元。
如前所述,如果所述調(diào)用方接收的所述占用時(shí)間段的申請結(jié)果為失敗時(shí),可以根據(jù)獲取的控制節(jié)點(diǎn)的最新占用時(shí)刻重新申請占用時(shí)間段。當(dāng)然,也可以設(shè)置間隔一段時(shí)間后重新申請,或者申請失敗達(dá)到閥值次數(shù)后發(fā)出提示信息,進(jìn)行相應(yīng)的處理。
所述調(diào)用方在接收到的所述占用時(shí)間段的申請結(jié)果為成功時(shí),可以計(jì)算每條業(yè)務(wù)消息的發(fā)送時(shí)間,并可以將所述業(yè)務(wù)消息置于在發(fā)送隊(duì)列中。本實(shí)施例中,也可以將所述發(fā)送隊(duì)列中的業(yè)務(wù)消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。本申請實(shí)施例中為調(diào)用方的業(yè)務(wù)消息通過申請占用時(shí)間段和為業(yè)務(wù)消息設(shè)置發(fā)送時(shí)間,可以有效的使調(diào)用方的業(yè)務(wù)消息固定頻率輸出。
S4:所述調(diào)用方在監(jiān)測到超過所述業(yè)務(wù)消息的發(fā)送時(shí)間時(shí),向所述控制節(jié)點(diǎn)申請所述業(yè)務(wù)消息的發(fā)送令牌。
所述調(diào)用方可以對所述占用時(shí)間段申請成功的業(yè)務(wù)消息進(jìn)行周期性的監(jiān)測,當(dāng)監(jiān)測到到達(dá)所述業(yè)務(wù)消息的發(fā)生時(shí)間時(shí)可以向控制節(jié)點(diǎn)申請發(fā)送令牌,以獲取業(yè)務(wù)消息發(fā)送指令。例如上述集群模式實(shí)施例中,可以設(shè)置一個(gè)進(jìn)程每間隔1秒對所述發(fā)送隊(duì)列中待發(fā)送狀態(tài)的業(yè)務(wù)消息的發(fā)送時(shí)間進(jìn)行掃描,在掃描到所述待發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)間超過當(dāng)前時(shí)刻時(shí),可以向TAIR計(jì)數(shù)節(jié)點(diǎn)申請并發(fā)令牌。
需要說明的,本實(shí)施例中所述的超過或者到達(dá)所述業(yè)務(wù)消息的發(fā)送時(shí)間可以包括當(dāng)前時(shí)間與所述發(fā)送時(shí)間相同,或者可以為所述當(dāng)前時(shí)間大于所述發(fā)送時(shí)間。例如間隔1秒掃描所述發(fā)送時(shí)間時(shí),掃描到當(dāng)前時(shí)間99秒到達(dá)了業(yè)務(wù)消息MSG_A的發(fā)送時(shí)間99秒,但還沒有到達(dá)業(yè)務(wù)消息MSG_B的發(fā)送時(shí)間為99.9秒。此時(shí),調(diào)用方可以先申請業(yè)務(wù)消息MSG_A的并發(fā)令牌。經(jīng)過1秒后當(dāng)前時(shí)間為100秒,掃描到已經(jīng)超過所述業(yè)務(wù)消息MSG_B的發(fā)送時(shí)間為99.9秒,此時(shí)可以申請業(yè)務(wù)消息MSG_B的并發(fā)令牌。當(dāng)然,也可以設(shè)置所述當(dāng)前時(shí)間大于所述發(fā)送時(shí)間的過期時(shí)間,可以對超過所述過期時(shí)間的業(yè)務(wù)消息不再申請發(fā)送令牌。例如設(shè)置所述為30秒時(shí),可以表示為掃描到當(dāng)前時(shí)間超過業(yè)務(wù)消息的發(fā)送時(shí)間30秒時(shí),則可以不再為所述超過發(fā)送時(shí)間30秒的業(yè)務(wù)消息申請發(fā)送令牌。對于上述此次不再申請發(fā)送令牌的業(yè)務(wù)消息,也可以由其他指定方式進(jìn)行處理。
所述調(diào)用方可以周期性的監(jiān)測掃描業(yè)務(wù)消息的發(fā)送時(shí)間,在監(jiān)測到當(dāng)前時(shí)間超過所述業(yè)務(wù)消息的發(fā)送時(shí)間時(shí),向所述控制節(jié)點(diǎn)申請發(fā)送令牌。
S5:所述控制節(jié)點(diǎn)在收到調(diào)用方的所述發(fā)送令牌的申請消息后,根據(jù)是否達(dá)到被調(diào)用方的最大業(yè)務(wù)處理能力確定所述調(diào)用方發(fā)送令牌的申請結(jié)果,并將所述申請結(jié)果反饋給相應(yīng)的調(diào)用方。
所述控制節(jié)點(diǎn)可以根據(jù)當(dāng)前被調(diào)用方的業(yè)務(wù)情況是否達(dá)到設(shè)定的最大業(yè)務(wù)處理能判斷是否為申請發(fā)送令牌的業(yè)務(wù)消息分配令牌,實(shí)現(xiàn)調(diào)用方業(yè)務(wù)處理流量的控制。例如所述控制節(jié)點(diǎn)根據(jù)當(dāng)前的并發(fā)鏈接數(shù)和設(shè)置的調(diào)用方與被調(diào)用方法可以保持的最大并發(fā)鏈接確定所述并發(fā)令牌的申請結(jié)果,如果當(dāng)前并發(fā)連接數(shù)沒有達(dá)到所述最大并發(fā)鏈接數(shù),則可以根據(jù)接收到的申請并發(fā)令牌的時(shí)間先后順序?yàn)闃I(yè)務(wù)消息發(fā)送并發(fā)令牌。然后可以將所述申請結(jié)果發(fā)送至所述調(diào)用方。通過控制節(jié)點(diǎn)對并發(fā)鏈接數(shù)據(jù)的控制,可以在未達(dá)到被調(diào)用方的最大業(yè)務(wù)處理能力時(shí)為業(yè)務(wù)消息分配發(fā)送令牌,最大化的調(diào)用被調(diào)用方的業(yè)務(wù)處理能力,提高消息處理效率。
如果當(dāng)前業(yè)務(wù)流量已經(jīng)達(dá)到被調(diào)用方的最大業(yè)務(wù)處理能力,如達(dá)到最大并發(fā)鏈接數(shù),則可以設(shè)置所述業(yè)務(wù)消息的發(fā)送令牌申請失敗,可以將申請失敗的結(jié)果返回給相應(yīng)的調(diào)用方。此時(shí),所述發(fā)送令牌申請失敗的業(yè)務(wù)消息可以在休眠預(yù)定時(shí)間后重新申請發(fā)送令牌。所述調(diào)用方休眠的時(shí)間可以根據(jù)消息處理需求進(jìn)行設(shè)定。
S6:所述調(diào)用方在接收到的所述業(yè)務(wù)消息的發(fā)送令牌申請結(jié)果為成功時(shí),發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
所述調(diào)用方的業(yè)務(wù)消息在申請發(fā)送令牌成功后,可以將業(yè)務(wù)消息發(fā)送至被調(diào)用方。如上所述,所述發(fā)送令牌申請失敗的業(yè)務(wù)消息可以休眠預(yù)定時(shí)間后重新申請發(fā)送令牌。
本申請所述的一種消息處理方法,調(diào)用方可以通過為業(yè)務(wù)消息設(shè)置發(fā)送時(shí)間,可以有效的使調(diào)用方的業(yè)務(wù)消息以均勻的頻率輸出。同時(shí),設(shè)置的控制節(jié)點(diǎn)對業(yè)務(wù)消息的發(fā)送時(shí)機(jī)進(jìn)行控制。這樣,本申請通過調(diào)用方固定頻率輸出和對被調(diào)用的業(yè)務(wù)流量控制可以將在控制節(jié)點(diǎn)的集中消息處理分散到各個(gè)調(diào)用方,大大減少控制節(jié)點(diǎn)的消息處理負(fù)擔(dān),可以有效的避免消息處理的單點(diǎn)性能瓶頸問題,提高發(fā)送消息的處理能力??刂乒?jié)點(diǎn)可以在不超過被調(diào)用方業(yè)務(wù)系統(tǒng)處理能力的情況下,以均勻平穩(wěn)的方式使被調(diào)用方業(yè)務(wù)系統(tǒng)處理能最大化,提高系統(tǒng)處理性能和系統(tǒng)的穩(wěn)定運(yùn)行。
本申請所述的消息處理方法,可以適用于包括但不限于集群模式下的調(diào)用方的消息處理。具體的本申請還提供一種消息處理方法,圖2是本申請所述一種消息處理方法一種實(shí)施例的方法流程示意圖,如圖2所示,所述方法可以包括:
S11:計(jì)算發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)長,根據(jù)所述發(fā)送時(shí)長發(fā)送申請占用時(shí)間段的對第一申請消息;
S12:在接收到的所述占用時(shí)間段的申請結(jié)果為成功時(shí),計(jì)算所述業(yè)務(wù)消息的發(fā)送時(shí)間;
S13:監(jiān)測當(dāng)前時(shí)間是否超過所述業(yè)務(wù)消息的發(fā)送時(shí)間;在監(jiān)測到超過發(fā)送時(shí)間時(shí),發(fā)送申請所述業(yè)務(wù)消息的發(fā)送令牌的第二申請消息;
S14:在接收到的所述發(fā)送令牌的申請結(jié)果為成功時(shí),發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
所述發(fā)送的第一申請消息或者第二申請消息,可以由調(diào)用方發(fā)送、例如TAIR的計(jì)數(shù)控制節(jié)點(diǎn)接收、處理。本申請不排除其他的消息處理裝置或者功能模塊等來接收、處理所述第一或者第二申請消息。具體的,本實(shí)施例中占用時(shí)間段消息處理、發(fā)送時(shí)刻的監(jiān)測、發(fā)送令牌消息的處理等可以參照本申請中的其他實(shí)施例,在此不做贅述。
如前述所述,本申請可以提供一種所述占用時(shí)間段的計(jì)算方式。具體的本申請所述一種消息處理方法的另一種實(shí)施例中,所述根據(jù)所述發(fā)送時(shí)長發(fā)送申請占用時(shí)間段的申請消息可以包括:
S111:獲取控制節(jié)點(diǎn)的最新占用時(shí)刻,向所述控制節(jié)點(diǎn)發(fā)送以所述獲取的最新占用時(shí)刻加上所述發(fā)送時(shí)長作為所述占用時(shí)間段的第一申請消息。
本實(shí)施例中所述的根據(jù)獲取的控制節(jié)點(diǎn)的最新占用時(shí)刻和發(fā)送時(shí)長計(jì)算得到的時(shí)間段具體的實(shí)施過程可以參照本申請中S101的實(shí)施方式和相關(guān)敘述。
本申請所述一種消息處理方法的另一種實(shí)施例中,如果申請所述占用時(shí)間段失敗,調(diào)用方接收到所述占用時(shí)間段的申請結(jié)果為失敗時(shí),可以嘗試重新發(fā)送申請。圖3是本申請所述一種消息處理方法另一種實(shí)施例的方法流程示意圖,具體的如圖3所示,所述一種消息處理方法的另一種實(shí)施例中,所述方法還可以包括:
S15:在接收到所述占用時(shí)間段的申請結(jié)果為失敗時(shí),根據(jù)獲取的更新的最新占用時(shí)刻和所述發(fā)送時(shí)長計(jì)算新的占用時(shí)間段;發(fā)送包括所述新的占用時(shí)間段的第一申請消息。
所述占用時(shí)間段的占用時(shí)間段申請失敗,通常的可以包括根據(jù)當(dāng)前獲取的最新占用時(shí)刻申請的占用時(shí)間段已經(jīng)被其他調(diào)用方搶先申請使用。一般的,例如控制節(jié)點(diǎn)中新的占用時(shí)間段被申請使用成功后,可以更新最新占用時(shí)間,以便后續(xù)的調(diào)用方可以再次申請發(fā)送時(shí)間資源。本實(shí)施例中在所述占用時(shí)間段申請失敗時(shí),可以獲取更新后的最新占用時(shí)刻,結(jié)合所述發(fā)送時(shí)長重新計(jì)算出新的占用時(shí)間段。然后可以繼續(xù)發(fā)送包括所述新的占用時(shí)間段的第一申請消息,繼續(xù)申請占用時(shí)間段。當(dāng)然,也可以設(shè)置申請失敗次數(shù)的閥值,如果調(diào)用方的占用時(shí)間段多次申請失敗,次數(shù)達(dá)到所述閥值時(shí)可以采取停止申請,或者發(fā)出警告、提示、統(tǒng)計(jì) 等信息,按照其他設(shè)定的方法進(jìn)行處理。
本申請所述的一種消息處理方法,所述調(diào)用方在收到所述發(fā)送令牌申請結(jié)果為失敗時(shí),可以重新進(jìn)行發(fā)送令牌的申請,也可以在休眠固定時(shí)間后再次申請。一般的,所述發(fā)送令牌申請失敗通??梢园ó?dāng)前業(yè)務(wù)流量達(dá)到了被調(diào)用方的最大業(yè)務(wù)處理能力,例如當(dāng)前并發(fā)鏈接數(shù)達(dá)到調(diào)用方與被調(diào)用方可以保持的最大并發(fā)連接數(shù)。在這種情況下,需要被調(diào)用方處理完一條或者多條業(yè)務(wù)消息后,有空閑的業(yè)務(wù)處理能力才可以允許接入進(jìn)行的業(yè)務(wù)。在現(xiàn)有的處理機(jī)制中,調(diào)用方通常是根據(jù)自身的業(yè)務(wù)消息產(chǎn)生情況向被調(diào)用方或者控制節(jié)點(diǎn)發(fā)送業(yè)務(wù)消息或者發(fā)送消息的令牌。在上述達(dá)到被調(diào)用方最大處理能力的情況下,被調(diào)用方不可以再接入業(yè)務(wù),業(yè)務(wù)消息或者發(fā)送令牌申請失敗,往往會導(dǎo)致盲目的發(fā)送新的申請,造成不必要的數(shù)據(jù)處理負(fù)擔(dān)。本申請?zhí)峁┑牧硪环N消息處理方法中,例如所述調(diào)用方在所述發(fā)送令牌申請失敗,可以根據(jù)控制節(jié)點(diǎn)確定的發(fā)送令牌最近的可用時(shí)間指示所述調(diào)用方的休眠時(shí)間,讓所述調(diào)用方在到達(dá)所述發(fā)送令牌的有效申請時(shí)間時(shí)再申請發(fā)送令牌。這樣既可以提高發(fā)送令牌的申請成功率,同時(shí)又可以避免為爭搶發(fā)送令牌在發(fā)送令牌不可申請的情況下仍然多次重復(fù)發(fā)送申請,增加額外開銷。
圖4是本申請所述一種消息處理方法另一種實(shí)施例的方法流程示意圖,如圖4所示,本申請所述的一種消息處理方法的另一種實(shí)施例中,所述方法還可以包括:
S16:在接收到的所述發(fā)送令牌的申請結(jié)果為失敗時(shí),獲取令牌申請有效時(shí)間;在達(dá)到所述令牌申請有效時(shí)間時(shí),重新發(fā)送所述發(fā)送令牌申請結(jié)果為失敗的業(yè)務(wù)消息的第二申請消息。
當(dāng)然,除了上述被調(diào)用方達(dá)到最大處理能力的情況,其他的發(fā)送令牌暫時(shí)不可申請的應(yīng)用場景,例如被其他調(diào)用方使用中未釋放,或者設(shè)置的其他發(fā)送令牌申請限制的應(yīng)用場景仍然可以采取上述實(shí)施例的所述的方法。
本申請所述一種消息處理方法中所述的控制節(jié)點(diǎn)可以對調(diào)用方發(fā)送的消息進(jìn)行處理,例如分配所述業(yè)務(wù)消息占用時(shí)間段的占用時(shí)間或者根據(jù)調(diào)用方的最大業(yè)務(wù)處理能力分配發(fā)送令牌等資源。具體的,本申請可以提供一種消息處理方法,所述方法可以包括:
S21:接收申請占用時(shí)間段和發(fā)送令牌的申請消息;
S22:根據(jù)預(yù)定規(guī)則確定占用時(shí)間段的申請結(jié)果,發(fā)送所述占用時(shí)間段的申請結(jié)果;
S23:根據(jù)是否達(dá)到被調(diào)用方的最大業(yè)務(wù)處理能力確定所述發(fā)送令牌的申請結(jié)果,發(fā)送所述發(fā)送令牌的申請結(jié)果。
圖5是本申請上述所述一種消息處理方法一種實(shí)施例的方法流程示意圖。在本實(shí)施例中,可以由控制節(jié)點(diǎn)接收調(diào)用方發(fā)送的占用時(shí)間段和發(fā)送令牌的申請消息,然后進(jìn)行相應(yīng)的數(shù)據(jù) 處理,將處理結(jié)果返回給調(diào)用方。上述實(shí)施例中所述控制節(jié)點(diǎn)確定所述占用時(shí)間段的申請結(jié)果的預(yù)定規(guī)則可以根據(jù)消息處理需求進(jìn)行設(shè)置。例如可以根據(jù)所述控制節(jié)點(diǎn)的最新占用時(shí)刻和在所述最新占用時(shí)刻最先接收到的占用時(shí)間段申請消息分配占用時(shí)間段的資源,也可以根據(jù)申請消息中設(shè)置的占用時(shí)間段的申請優(yōu)先級進(jìn)行分配。具體的可以根據(jù)實(shí)際消息處理需求設(shè)置,本實(shí)施例可以對此不做具體某一方式的限定。
圖6是本申請上述所述一種消息處理方法另一種實(shí)施例的方法流程示意圖。如圖6所示,在本申請?zhí)峁┑囊环N消息處理方法的另一種實(shí)施例中,所述方法可以包括:
S24:所述占用時(shí)間段的申請結(jié)果為成功時(shí),更新所述控制節(jié)點(diǎn)的最新占用時(shí)刻。
所述控制節(jié)點(diǎn)為調(diào)用方的業(yè)務(wù)消息分配占用時(shí)間段后,可以更新最新占用時(shí)刻,以便其它發(fā)送占用時(shí)間段申請失敗的調(diào)用方可以根據(jù)更新的最新占用時(shí)刻重新申請發(fā)送時(shí)間資源。
圖7是本申請上述所述一種消息處理方法另一種實(shí)施例的方法流程示意圖。如圖7所示,在本申請?zhí)峁┑囊环N消息處理方法的另一種實(shí)施例中,所述方法可以包括:
S25:在達(dá)到被調(diào)用方的最大業(yè)務(wù)處理能力時(shí),獲取所述被調(diào)用方最近的業(yè)務(wù)接入可用時(shí)間,將所述最近的業(yè)務(wù)接入可用時(shí)間作為令牌申請有效時(shí)間。
所述的設(shè)置的令牌申請有效時(shí)間可以包括為所述被調(diào)用方最近的業(yè)務(wù)接入可用時(shí)間,也可以包括設(shè)置的其他令牌申請的有效時(shí)間。所述的將所述令牌有效時(shí)間提供給調(diào)用方可以包括提供查詢接口,或者發(fā)送所述令牌申請有效時(shí)間至調(diào)用方。
本申請上述實(shí)施例中所述的消息處理方法,通過對調(diào)用方業(yè)務(wù)消息均勻平穩(wěn)輸出和對被調(diào)用的業(yè)務(wù)流量控制可以將在控制節(jié)點(diǎn)的集中消息處理分散到各個(gè)調(diào)用方,大大減少控制節(jié)點(diǎn)的消息處理負(fù)擔(dān),可以有效的避免消息處理的單點(diǎn)性能瓶頸問題,提高發(fā)送消息的處理能力。并且申請所述方法可以在不超過被調(diào)用方業(yè)務(wù)系統(tǒng)處理能力的情況下,以均勻平穩(wěn)的方式使被調(diào)用方業(yè)務(wù)系統(tǒng)處理能最大化,提高被調(diào)用方系統(tǒng)處理性能和系統(tǒng)運(yùn)行的穩(wěn)定性。
基于本申請上述實(shí)施例所述的消息處理方法,本申請?zhí)峁┮环N消息處理裝置。圖8是本申請所述消息處理裝置一種實(shí)施例的模塊結(jié)構(gòu)示意圖。所述消息處理終端可以包括PC終端、移動電子設(shè)備、服務(wù)器、分布式網(wǎng)絡(luò)終端以及包括存儲于實(shí)體介質(zhì)上可執(zhí)行程序的裝置、模塊、應(yīng)用等。具體的,如圖8所示,所述消息處理裝置可以包括:
計(jì)算模塊101,可以用于計(jì)算發(fā)送業(yè)務(wù)消息的發(fā)送時(shí)長,并基于所述發(fā)送時(shí)長計(jì)算發(fā)送業(yè)務(wù)消息的占用時(shí)間段;
時(shí)間段申請模塊102,可以用于發(fā)送申請所述占用時(shí)間段的第一申請消息;
接收模塊103,可以用于接收占用時(shí)間段和發(fā)送令牌的申請結(jié)果的消息;
發(fā)送時(shí)間計(jì)算模塊104,可以用于基于接收到的所述占用時(shí)間段的申請結(jié)果為成功的消息計(jì)算業(yè)務(wù)消息的發(fā)送時(shí)間;
令牌申請模塊105,可以用于監(jiān)測當(dāng)前時(shí)間是否超過所述業(yè)務(wù)消息的發(fā)送時(shí)間;在監(jiān)測到超過所述發(fā)送時(shí)間時(shí),發(fā)送申請所述業(yè)務(wù)消息的發(fā)送令牌的第二申請消息;
發(fā)送模塊106,可以用于基于接收到的所述發(fā)送令牌的申請結(jié)果為成功的消息發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
本申請?zhí)峁┑乃鱿⑻幚硌b置可以以申請的占用時(shí)間段計(jì)算出的業(yè)務(wù)消息的發(fā)送時(shí)間均勻、平穩(wěn)的輸出業(yè)務(wù)消息,并可以通過發(fā)送令牌實(shí)現(xiàn)最大業(yè)務(wù)的輸出。本申請的消息處理裝置可以有效提高業(yè)務(wù)消息被調(diào)用方系統(tǒng)運(yùn)行的穩(wěn)定性,同時(shí)可以降低控制節(jié)點(diǎn)的負(fù)擔(dān),避免控制節(jié)點(diǎn)業(yè)務(wù)消息處理的單點(diǎn)性能瓶頸問題。
圖9是本申請所述消息處理裝置中計(jì)算模塊101一種實(shí)施例的模塊結(jié)構(gòu)示意圖。如圖9所示,所述計(jì)算模塊101可以包括:
占用時(shí)刻模塊1011,可以用于獲取控制節(jié)點(diǎn)的最新占用時(shí)刻;
占用時(shí)間段模塊1012,可以用于以所述獲取的最新占用時(shí)刻加上所述發(fā)送時(shí)長計(jì)算出的時(shí)間段作為所述占用時(shí)間段。
圖10是本申請所述一種消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖。如圖10所示,所述裝置還可以包括:
第一申請失敗處理模塊107,可以用于在接收到所述占用時(shí)間段的申請結(jié)果為失敗時(shí),根據(jù)所述計(jì)算模塊獲取的最新占用時(shí)刻計(jì)算業(yè)務(wù)消息的新的占用時(shí)間段;將包括所述新的占用時(shí)間段的第一申請消息發(fā)送至所述時(shí)間段申請模塊102。
本實(shí)施例中在所述占用時(shí)間段申請失敗時(shí),可以獲取更新后的最新占用時(shí)刻,結(jié)合所述發(fā)送時(shí)長重新計(jì)算出新的占用時(shí)間段。然后可以繼續(xù)發(fā)送包括所述新的占用時(shí)間段的第一申請消息,繼續(xù)申請占用時(shí)間段。當(dāng)然,也可以設(shè)置申請失敗次數(shù)的閥值,如果調(diào)用方的占用時(shí)間段多次申請失敗,次數(shù)達(dá)到所述閥值時(shí)可以采取停止申請,或者發(fā)出警告、提示、統(tǒng)計(jì)等信息,按照其他設(shè)定的方法進(jìn)行處理。
圖11是本申請所述一種消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖。如圖11所示,所述裝置還可以包括:
第二申請失敗處理模塊108,可以用于在接收到的所述發(fā)送令牌的申請結(jié)果為失敗時(shí),獲取令牌申請有效時(shí)間;在達(dá)到所述令牌申請有效時(shí)間時(shí),向所述發(fā)送模塊106下達(dá)重新發(fā)送所述發(fā)送令牌申請結(jié)果為失敗的業(yè)務(wù)消息的第二申請消息的指令。
上述實(shí)施例的一種消息處理裝置中,例如所述調(diào)用方在所述發(fā)送令牌申請失敗,可以根據(jù)控制節(jié)點(diǎn)確定的發(fā)送令牌最近的可用時(shí)間指示所述調(diào)用方的休眠時(shí)間,讓所述調(diào)用方在到達(dá)所述發(fā)送令牌的有效性申請時(shí)間時(shí)再申請發(fā)送令牌。這樣既可以提高發(fā)送令牌的申請成功率,同時(shí)又可以避免為爭搶發(fā)送令牌在發(fā)送令牌不可申請的情況下仍然多次重復(fù)發(fā)送申請,增加額外開銷。
在所述第一申請消息或第二申請消息的處理方,例如控制節(jié)點(diǎn),可以根據(jù)預(yù)先設(shè)置的消息處理方法對消息輸出端進(jìn)行消息資源的分配和鏈接數(shù)的控制等處理,實(shí)現(xiàn)消息輸出端業(yè)務(wù)消息的均勻輸出和在不超過被調(diào)用方業(yè)務(wù)最大處理能力的情況下最大化的利用被調(diào)用方的業(yè)務(wù)處理能力。本申請還可以提供一種消息處理裝置,具體的實(shí)施例中如集群模式下的控制節(jié)點(diǎn),所述裝置的一種實(shí)施方法如圖12所示,具體的所述裝置可以包括:
申請消息接收模塊201,可以用于接收包括占用時(shí)間段的申請消息;還可以用于接收發(fā)送令牌的申請消息;
占用時(shí)間分配模塊202,可以用于根據(jù)預(yù)定規(guī)則為所述申請消息中的占用時(shí)間段分配業(yè)務(wù)消息的占用時(shí)間段;
令牌分配模塊203,可以用于根據(jù)被調(diào)用方當(dāng)前的業(yè)務(wù)流量和最大業(yè)務(wù)處理能力分配發(fā)送令牌;
申請結(jié)果發(fā)送模塊204,可以用于發(fā)送所述占用時(shí)間段申請結(jié)果的消息;還可以用于發(fā)送所述發(fā)送令牌申請結(jié)果的消息。
圖12是本申請所述一種消息處理裝置一種實(shí)施例的模塊結(jié)構(gòu)示意圖。本實(shí)施例中所述的消息處理裝置例如可以為控制節(jié)點(diǎn),可以接收調(diào)用方發(fā)送的占用時(shí)間段和發(fā)送令牌的申請消息,然后進(jìn)行相應(yīng)的數(shù)據(jù)處理,將處理結(jié)果返回給調(diào)用方。上述實(shí)施例中所述控制節(jié)點(diǎn)確定所述占用時(shí)間段的申請結(jié)果的預(yù)定規(guī)則可以根據(jù)消息處理需求進(jìn)行設(shè)置。例如可以根據(jù)所述控制節(jié)點(diǎn)的最新占用時(shí)刻和在所述最新占用時(shí)刻最先接收到的占用時(shí)間段申請消息分配占用時(shí)間段的資源,也可以根據(jù)申請消息中設(shè)置的占用時(shí)間段的申請優(yōu)先級進(jìn)行分配。具體的可以根據(jù)實(shí)際消息處理需求設(shè)置,本實(shí)施例可以對此不做具體某一方式的限定。
圖13是本申請所述一種消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖。如圖13所示,所述裝置還可以包括:
占用時(shí)刻更新模塊205,可以用于在為所述業(yè)務(wù)消息分配占用時(shí)間段后,更新所述占用時(shí)間分配模塊202最新占用時(shí)刻。
所述占用時(shí)刻更新模塊205可以在所述消息處理裝置為的業(yè)務(wù)消息分配占用時(shí)間段后,更新最新占用時(shí)刻,以便其它發(fā)送占用時(shí)間段申請失敗的調(diào)用方可以根據(jù)更新的最新占用時(shí)刻重新申請發(fā)送時(shí)間資源。所述的最新占用時(shí)刻可以表示在所述消息處理中裝置中,在所述占用時(shí)刻之前的時(shí)間已經(jīng)分配占用,所在占用時(shí)刻后面的時(shí)間可以申請占用。實(shí)現(xiàn)該數(shù)據(jù)處理的單元可以設(shè)置在所述占用時(shí)間分配模塊202中,當(dāng)然,其他的實(shí)施例中也可以設(shè)置在其他或者專用的模塊中。
圖14是本申請所述一種消息處理裝置另一種實(shí)施例的模塊結(jié)構(gòu)示意圖。如圖14所示,所述裝置還可以包括:
令牌申請時(shí)間模塊206,可以用于在達(dá)到所述被調(diào)用方的最大業(yè)務(wù)處理能力時(shí),獲取所述被調(diào)用方最近的業(yè)務(wù)接入可用時(shí)間,將所述最近的業(yè)務(wù)接入可用時(shí)間作為令牌申請有效時(shí)間。
本實(shí)施例中設(shè)置令牌申請時(shí)間模塊206,可以有效的提高調(diào)用方業(yè)務(wù)消息發(fā)送令牌的申請成功率,減少發(fā)送令牌申請的次數(shù),提高系統(tǒng)處理性能。
本申請所述的消息處理裝置,可以用于所述集群模式下重發(fā)利用被調(diào)用方系統(tǒng)最大處理能力的并發(fā)控制。當(dāng)然,本申請并不限于所述集群模式下的消息處理,也可以適用于其他應(yīng)用場景消息發(fā)送控制的業(yè)務(wù)處理系統(tǒng)?;谏鲜鰧?shí)施例,本申請?zhí)峁┮环N消息處理系統(tǒng),圖15是本申請所述一種消息處理系統(tǒng)的模塊結(jié)構(gòu)示意圖,如圖15所示,所述系統(tǒng)可以包括:
消息客戶端1,可以用于向控制端2發(fā)送基于包括發(fā)送時(shí)長設(shè)置的占用時(shí)間段的第一申請消息;還可以用于基于接收到的所述占用時(shí)間段的申請結(jié)果為成功的消息計(jì)算業(yè)務(wù)消息的發(fā)送時(shí)間;還可以用于監(jiān)測當(dāng)前時(shí)間是否超過所述業(yè)務(wù)消息的發(fā)送時(shí)間,并在監(jiān)測到超過所述發(fā)送時(shí)間時(shí)向所述控制端2發(fā)送申請所述業(yè)務(wù)消息的發(fā)送令牌的第二申請消息;還可以用于基于接收到的所述發(fā)送令牌的申請結(jié)果為成功的消息發(fā)送所述發(fā)送令牌申請成功的業(yè)務(wù)消息。
控制端2,可以用于接收消息客戶端發(fā)送的所述第一申請消息和所述第二申請消息;還可以用于根據(jù)預(yù)定規(guī)則為所述第一申請消息中的占用時(shí)間段分配業(yè)務(wù)消息的占用時(shí)間段;還可以用于根據(jù)被調(diào)用方當(dāng)前的業(yè)務(wù)流量和最大業(yè)務(wù)處理能力為所述第二申請消息中的業(yè)務(wù)消息分配發(fā)送令牌;還可以用于將所述第一申請消息和第二申請消息的申請結(jié)果發(fā)送給所述消息客戶端。
本申請中所述的消息處理方法、裝置及系統(tǒng),可以通過控制調(diào)用方業(yè)務(wù)消息均勻平穩(wěn)輸出和對被調(diào)用的業(yè)務(wù)流量控制可以將在控制節(jié)點(diǎn)的集中消息處理分散到各個(gè)調(diào)用方,大大減 少控制節(jié)點(diǎn)的消息處理負(fù)擔(dān),可以有效的避免消息處理的單點(diǎn)性能瓶頸問題,提高業(yè)務(wù)消息發(fā)送的處理能力。并且申請所述方法可以在不超過被調(diào)用方業(yè)務(wù)系統(tǒng)處理能力的情況下,以均勻平穩(wěn)的方式使被調(diào)用方業(yè)務(wù)系統(tǒng)處理能最大化,提高被調(diào)用方系統(tǒng)處理性能和系統(tǒng)運(yùn)行的穩(wěn)定性。
盡管本申請內(nèi)容中提到集群模式下的消息交互、計(jì)數(shù)控制節(jié)點(diǎn)Tair、令牌等之類的數(shù)據(jù)交互、處理描述,但是,本申請并不局限于必須是完全標(biāo)準(zhǔn)或者所提及的方法的數(shù)據(jù)交互、處理的情況。本申請中各個(gè)實(shí)施例所涉及的上述描述僅是本申請中的一些實(shí)施例中的應(yīng)用,在某些標(biāo)準(zhǔn)、方法的基礎(chǔ)上略加修改后的處理方法也可以實(shí)行上述本申請各實(shí)施例的方案。當(dāng)然,在符合本申請上述各實(shí)施例的中所述的處理方法步驟的其他無創(chuàng)造性的變形,仍然可以實(shí)現(xiàn)相同的申請,在此不再贅述。
雖然本申請?zhí)峁┝巳鐚?shí)施例或流程圖所述的方法操作步驟,但基于常規(guī)或者無創(chuàng)造性的手段可以包括更多或者更少的操作步驟。實(shí)施例中列舉的步驟順序僅僅為眾多步驟執(zhí)行順序中的一種方式,不代表唯一的執(zhí)行順序。在實(shí)際中的裝置或客戶端產(chǎn)品執(zhí)行時(shí),可以按照實(shí)施例或者附圖所示的方法順序執(zhí)行或者并行執(zhí)行(例如并行處理器或者多線程處理的環(huán)境)。
上述實(shí)施例闡明的單元或模塊,具體可以由計(jì)算機(jī)芯片或?qū)嶓w實(shí)現(xiàn),或者由具有某種功能的產(chǎn)品來實(shí)現(xiàn)。為了描述的方便,描述以上裝置時(shí)以功能分為各種模塊分別描述。當(dāng)然,在實(shí)施本申請時(shí)可以把各模塊的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn),例如將發(fā)送時(shí)間模塊合并到計(jì)算模塊中計(jì)算發(fā)送時(shí)間,也可以將實(shí)現(xiàn)同一功能的模塊由多個(gè)子模塊或子單元的組合實(shí)現(xiàn)。
本鄰域技術(shù)人員也知道,除了以純計(jì)算機(jī)可讀程序代碼方式實(shí)現(xiàn)控制器以外,完全可以通過將方法步驟進(jìn)行邏輯編程來使得控制器以邏輯門、開關(guān)、專用集成電路、可編程邏輯控制器和嵌入微控制器等的形式來實(shí)現(xiàn)相同功能。因此這種控制器可以被認(rèn)為是一種硬件部件,而對其內(nèi)部包括的用于實(shí)現(xiàn)各種功能的裝置也可以視為硬件部件內(nèi)的結(jié)構(gòu)?;蛘呱踔粒梢詫⒂糜趯?shí)現(xiàn)各種功能的裝置視為既可以是實(shí)現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。
本申請可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)、類等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請,在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲介質(zhì)中。
通過以上的實(shí)施方式的描述可知,本鄰域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn)?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),移動終端,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
本說明書中的各個(gè)實(shí)施例采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同或相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。本申請可用于眾多通用或?qū)S玫挠?jì)算機(jī)系統(tǒng)環(huán)境或配置中。例如:個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程的電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。
雖然通過實(shí)施例描繪了本申請,本鄰域普通技術(shù)人員知道,本申請有許多變形和變化而不脫離本申請的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本申請的精神。