一種批量發(fā)送消息的方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種批量發(fā)送消息的方法和裝置,應(yīng)用于分布式消息系統(tǒng),所述方法包括:讀取待發(fā)送的已經(jīng)封裝的請求包;解析所述請求包,以獲取元信息以及消息;判斷所述元信息是否與之前的請求包的元信息相同;以及根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。利用所述方法和裝置,可以針對元信息相同的消息進行批量處理,一起發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,減少了網(wǎng)絡(luò)延遲,大幅提升了發(fā)送性能。
【專利說明】一種批量發(fā)送消息的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機【技術(shù)領(lǐng)域】,尤其涉及一種批量發(fā)送消息的方法和裝置。
【背景技術(shù)】
[0002]分布式消息系統(tǒng)是采用分布式處理進行消息發(fā)布和訂閱的系統(tǒng),典型的分布式消息系統(tǒng)包括 kafka, RabbitMQ, ActiveMQ, QBus 等等。
[0003]Qbus是一種以kafka為原型的分布式消息系統(tǒng),其主要由發(fā)布方(Producer)、訂閱方(Consumer)、存儲方(Broker)、協(xié)調(diào)方(Zookeeper)、代理方(Agent)等單元組成。其中Agent的主要作用是將日志文件實時推送到存儲方。
[0004]QBus系統(tǒng)目前使用消息單條發(fā)送策略,為了保證數(shù)據(jù)可靠性,數(shù)據(jù)發(fā)送需要等待確收(ACK),網(wǎng)絡(luò)延遲成為了性能的瓶頸,其中,需要逐一讀取請求包后發(fā)送到對應(yīng)的服務(wù)器數(shù)據(jù)目錄,多次經(jīng)過網(wǎng)絡(luò)造成性能較差,無法滿足大量用戶調(diào)用發(fā)送接口的需求,容易造成數(shù)據(jù)發(fā)送積壓,引發(fā)積壓報警,增加運維成本。另外,大量未發(fā)送消息導致本地文件無法刪除,本地磁盤空間占用率高。
【發(fā)明內(nèi)容】
[0005]鑒于上述問題,提出了本發(fā)明實施例的批量發(fā)送消息的方法和裝置,以便克服上述問題或者至少部分地解決上述問題。
[0006]依據(jù)本發(fā)明的第一方面,提供了一種批量發(fā)送消息的方法,應(yīng)用于分布式消息系統(tǒng),包括:讀取待發(fā)送的已經(jīng)封裝的請求包;解析所述請求包,以獲取元信息以及消息;判斷所述元信息是否與之前的請求包的元信息相同;以及根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0007]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的方法中,所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟包括:若判斷結(jié)果為相同,則將對應(yīng)的消息緩存到緩存文件中;若判斷結(jié)果為不同,則將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
[0008]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的方法中,在所述讀取待發(fā)送的已經(jīng)封裝的請求包的步驟之前,所述方法還包括:將單個消息與元信息封裝為請求包。
[0009]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的方法中,在所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟中,調(diào)用異步發(fā)送接口將經(jīng)過處理的元信息以及對應(yīng)的消息發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0010]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的方法中,在所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟之后,所述方法還包括:接收服務(wù)器返回的確收信息,并將所發(fā)送的元信息以及對應(yīng)的消息刪除。
[0011]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的方法中,在所述解析所述請求包以獲取元信息以及消息的步驟之后,所述方法還包括:判斷所述元信息所對應(yīng)的消息的最大發(fā)送超時時間是否低于預先定義的閾值;以及若判斷結(jié)果為是,則將所述請求包發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0012]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的方法中,在所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還包括:判斷所緩存的消息大小是否超出預先定義的緩存大?。灰约叭襞袛嘟Y(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0013]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的方法中,在所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還包括:判斷是否已經(jīng)超過所緩存的消息的發(fā)送超時時間;以及若判斷結(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0014]依據(jù)本發(fā)明的第二方面,提供了一種批量發(fā)送消息的裝置,應(yīng)用于分布式消息系統(tǒng),包括:讀取模塊,用于讀取待發(fā)送的已經(jīng)封裝的請求包;解析模塊,用于解析所述請求包,以獲取元信息以及消息;第一判斷模塊,用于判斷所述元信息是否與之前的請求包的元信息相同;以及處理和發(fā)送模塊,用于根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0015]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置中,處理和發(fā)送模塊:在判斷結(jié)果為相同的情況下,將對應(yīng)的消息緩存到緩存文件中;在判斷結(jié)果為不同的情況下,將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
[0016]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置中,還包括封裝模塊,用于將單個消息與元信息封裝為請求包。
[0017]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置中,所述處理和發(fā)送模塊調(diào)用異步發(fā)送接口將經(jīng)過處理的元信息以及對應(yīng)的消息發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0018]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置中,還包括確收和刪除模塊,用于接收服務(wù)器返回的確收信息,并將所發(fā)送的元信息以及對應(yīng)的消息刪除。
[0019]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置中,還包括第二判斷模塊,用于在所述解析模塊解析所述請求包以獲取元信息以及消息之后,判斷所述元信息所對應(yīng)的消息的最大發(fā)送超時時間是否低于預先定義的閾值,并且在判斷結(jié)果為是的情況下,所述處理和發(fā)送模塊將所述請求包發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0020]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置中,還包括第三判斷模塊,用于在所述處理和發(fā)送模塊將對應(yīng)的消息緩存到緩存文件中之后,判斷所緩存的消息大小是否超出預先定義的緩存大小,并且在判斷結(jié)果為是的情況下,所述處理和發(fā)送模塊將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0021]可選地,在根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置中,還包括第四判斷模塊,用于在所述處理和發(fā)送模塊將對應(yīng)的消息緩存到緩存文件中之后,判斷是否已經(jīng)超過所緩存的消息的發(fā)送超時時間,并且在判斷結(jié)果為是的情況下,所述處理和發(fā)送模塊將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0022]本發(fā)明提供了上述批量發(fā)送消息的方法和裝置,根據(jù)本發(fā)明的實施例,可以讀取待發(fā)送的已經(jīng)封裝的請求包,解析所述請求包以獲取元信息以及消息,判斷所述元信息是否與之前的請求包的元信息相同,并根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。由此,可以針對元信息相同的消息進行批量處理,一起發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,減少了網(wǎng)絡(luò)延遲,大幅提升了發(fā)送性能。另外,根據(jù)本發(fā)明的各可選實施例,由于采取了單個緩存文件的方式,在消息未發(fā)送成功時容易執(zhí)行回滾操作;在接收到服務(wù)器返回的確收信息后刪除元信息及消息,降低了對本地磁盤的占用;還能夠針對消息發(fā)送超時時間以及所緩存的消息大小的情況,進行不同的有針對性的處理,確保了發(fā)送實時性以及發(fā)送成功率。
[0023]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【專利附圖】
【附圖說明】
[0024]通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0025]圖1是根據(jù)本發(fā)明的實施例的批量發(fā)送消息方法的流程示意圖;以及
[0026]圖2是根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置以及服務(wù)器的結(jié)構(gòu)示意圖。
【具體實施方式】
[0027]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
[0028]根據(jù)本發(fā)明的第一方面,提供了一種批量發(fā)送消息的方法100,應(yīng)用于分布式消息系統(tǒng)。
[0029]在本發(fā)明的實施例中,分布式消息系統(tǒng)可以是采用分布式處理進行消息發(fā)布和訂閱的系統(tǒng),例如包括kafka, RabbitMQ, ActiveMQ, QBus等等。在下文中,將以QBus系統(tǒng)為例,對于本發(fā)明的原理進行詳細地描述,以幫助讀者更好地理解本發(fā)明的原理。但本領(lǐng)域技術(shù)人員應(yīng)當理解,本發(fā)明的范圍并不限于QBus系統(tǒng),而是可以適用于任何分布式消息系統(tǒng)。
[0030]QBus系統(tǒng)主要由發(fā)布方(Producer)、訂閱方(Consumer)、存儲方(Broker)、協(xié)調(diào)方(Zookeeper)、代理方(Agent)等單元組成。其中代理方的主要作用是將日志文件實時推送到存儲方,因此代理方的消息發(fā)送機制至關(guān)重要。下面將主要以代理方的消息發(fā)送為例來例示本發(fā)明的原理,同樣,本發(fā)明的范圍不限于此,而是可以應(yīng)用于分布式消息系統(tǒng)(例如,QBus系統(tǒng))的各個單元。
[0031]圖1示出了根據(jù)本發(fā)明的實施例的批量發(fā)送消息方法100的流程圖。如圖1所示,方法100始于步驟S110,其中,讀取待發(fā)送的已經(jīng)封裝的請求包。
[0032]可選地,根據(jù)本發(fā)明的實施例,在所述讀取待發(fā)送的已經(jīng)封裝的請求包的步驟S110之前,所述方法還可以包括以下步驟:將單個消息與元信息(即,meta信息)封裝為請求包。根據(jù)本發(fā)明的實施例,可以調(diào)用SDK(軟件開發(fā)套件)將單個消息與元信息封裝成請求包,并記錄在本地文件中,以準備發(fā)送到服務(wù)器。
[0033]而在步驟S110中,可以讀取(例如,從本地文件中)該待發(fā)送的已經(jīng)封裝的請求包。之后,在步驟S120中,解析所述請求包,以獲取元信息以及消息。例如,可以將已經(jīng)封裝的請求包解封裝,并從中獲取元信息以及消息。
[0034]在步驟S120之后,執(zhí)行步驟S130,其中,判斷所述元信息是否與之前的請求包的元信息相同。根據(jù)本發(fā)明的實施例,存在多種不同的元信息。將與元信息一起封裝在請求包中的消息稱為與元信息對應(yīng)的消息,相同的元信息對應(yīng)的消息類型相同或相似,不同的元信息對應(yīng)的消息類型不同或不相似。根據(jù)本發(fā)明的實施例,可以將該類型相同或相似的消息一起批量發(fā)送,而類型不同或不相似的消息需要分別發(fā)送。
[0035]接下來,執(zhí)行步驟S140,其中,根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0036]根據(jù)本發(fā)明的實施例,所述步驟S140可以包括:若判斷結(jié)果為相同,則將對應(yīng)的消息緩存到緩存文件中;若判斷結(jié)果為不同,則將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
[0037]在上述步驟S140中,如果判斷結(jié)果相同,即元信息與之前的請求包的元信息相同,則可以將該元信息對應(yīng)的消息緩存到緩存文件(例如,Batcher, buf文件)中,以準備之前的請求包中的消息一起批量發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0038]而如果判斷結(jié)果不同,即元信息與之前的請求包的元信息不同,需要分別進行發(fā)送,則可以將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。即,將之前緩存在緩存文件中的所有相同類型的消息與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,該服務(wù)器數(shù)據(jù)目錄與該元信息相對應(yīng)。在發(fā)送完成后,可以將所述緩存文件清空,并對所述不同的元信息所對應(yīng)的消息進行緩存處理,將其緩存到緩存文件中。接下來,繼續(xù)讀取下一個請求包,并進行解析以獲取其中的元信息以及消息,并判斷這一元信息是否與現(xiàn)在緩存的消息對應(yīng)的元信息相同,并進行上述處理。接著,對于下面的請求包重復上述過程。
[0039]根據(jù)本發(fā)明的實施例,在所述步驟S140中,可以調(diào)用異步發(fā)送接口(例如,SDK異步發(fā)送接口)將經(jīng)過處理的元信息以及對應(yīng)的消息發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0040]可選地,根據(jù)本發(fā)明的實施例,在所述步驟S140之后,所述方法100可以包括以下步驟:接收服務(wù)器返回的確收信息,并將所發(fā)送的元信息以及對應(yīng)的消息刪除。由此,可以將已經(jīng)完成發(fā)送的元信息以及消息刪除,減少對于本地磁盤空間的占用。
[0041]可選地,根據(jù)本發(fā)明的一種實施例,在所述步驟S120之后,所述方法還可以包括以下可選步驟:判斷所述元信息所對應(yīng)的消息的最大發(fā)送超時時間是否低于預先定義的閾值;若判斷結(jié)果為是,則將所述請求包發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。在上述實施例中,判斷本次讀取和解析的請求包中的元信息所對應(yīng)的消息的最大發(fā)送時間是否低于預先定義的閾值,即,判斷這種元信息對應(yīng)的消息是否具有較高的發(fā)送實時性的要求,對于這種元信息(及消息),為了不影響發(fā)送實時性,不進行批量發(fā)送,而是直接進行單獨地發(fā)送。上述預先定義的閾值可以根據(jù)實際需要來進行選擇,為了確保較高的發(fā)送實時性,可以選擇較小的閾值;而為了確保較高的發(fā)送性能,則可以選擇較大的閾值。
[0042]可選地,根據(jù)本發(fā)明的一種實施例,在所述步驟S140中,執(zhí)行了所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還可以包括以下可選步驟:判斷所緩存的消息大小是否超出預先定義的緩存大??;若判斷結(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。在上述實施例中,可以保證批量發(fā)送的請求包的大小不至于過大而影響發(fā)送,其中,判斷已經(jīng)緩存的消息的大小是否超出了預先定義的緩存大小,如果已經(jīng)超出,則不再緩存后續(xù)的相同的元信息對應(yīng)的消息,而是直接進行重新封裝和發(fā)送。
[0043]可選地,根據(jù)本發(fā)明的一種實施例,在所述步驟S140中,執(zhí)行了所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還可以包括以下可選步驟:判斷是否已經(jīng)超過所緩存的消息的發(fā)送超時時間;以及若判斷結(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。在上述實施例中,可以保證較高的發(fā)送實時性,即,保證已經(jīng)緩存的消息不至于發(fā)送超時,一旦判斷已經(jīng)超過所緩存的消息的發(fā)送超時時間,就不再緩存后續(xù)的相同的元信息對應(yīng)的消息,而是直接進行重新封裝和發(fā)送。
[0044]根據(jù)本發(fā)明的第二方面,與上述方法100相對應(yīng),還提供了一種批量發(fā)送消息的裝置200,應(yīng)用于分布式消息系統(tǒng)。
[0045]在本發(fā)明的實施例中,分布式消息系統(tǒng)可以是采用分布式處理進行消息發(fā)布和訂閱的系統(tǒng),例如包括kafka, RabbitMQ, ActiveMQ, QBus等等。在下文中,將以QBus系統(tǒng)為例,對于本發(fā)明的原理進行詳細地描述,以幫助讀者更好地理解本發(fā)明的原理。但本領(lǐng)域技術(shù)人員應(yīng)當理解,本發(fā)明的范圍并不限于QBus系統(tǒng),而是可以適用于任何分布式消息系統(tǒng)。
[0046]QBus系統(tǒng)主要由發(fā)布方(Producer)、訂閱方(Consumer)、存儲方(Broker)、協(xié)調(diào)方(Zookeeper)、代理方(Agent)等單元組成。其中代理方的主要作用是將日志文件實時推送到存儲方,因此代理方的消息發(fā)送機制至關(guān)重要。下面將主要以代理方的消息發(fā)送為例來例示本發(fā)明的原理,同樣,本發(fā)明的范圍不限于此,而是可以應(yīng)用于分布式消息系統(tǒng)(例如,QBus系統(tǒng))的各個單元。
[0047]圖2示出了根據(jù)本發(fā)明的實施例的批量發(fā)送消息的裝置200和服務(wù)器300的結(jié)構(gòu)示意圖。如圖2所示,裝置200主要包括讀取模塊210、解析模塊220、第一判斷模塊230、處理和發(fā)送模塊240。其中,所述讀取模塊210用于讀取待發(fā)送的已經(jīng)封裝的請求包;所述解析模塊220,用于解析所述請求包,以獲取元信息以及消息;所述第一判斷模塊230,用于判斷所述元信息是否與之前的請求包的元信息相同;所述處理和發(fā)送模塊240,用于根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0048]首先,所述讀取模塊210讀取待發(fā)送的已經(jīng)封裝的請求包。
[0049]可選地,根據(jù)本發(fā)明的實施例,所述裝置200還可以包括可選模塊:封裝模塊(在圖2中未示出),在所述讀取模塊210讀取待發(fā)送的已經(jīng)封裝的請求包之前,所述封裝模塊可以將單個消息與元信息(即,meta信息)封裝為請求包。根據(jù)本發(fā)明的實施例,所述封裝模塊可以調(diào)用SDK(軟件開發(fā)套件)將單個消息與元信息封裝成請求包,并記錄在本地文件中,以準備發(fā)送到服務(wù)器。
[0050]所述讀取模塊210可以讀取(例如,從本地文件中)該待發(fā)送的已經(jīng)封裝的請求包。之后,所述解析模塊220可以解析所述請求包,以獲取元信息以及消息。例如,所述解析模塊220可以將已經(jīng)封裝的請求包解封裝,并從中獲取元信息以及消息。
[0051]隨后,所述第一判斷模塊230可以判斷所述元信息是否與之前的請求包的元信息相同。根據(jù)本發(fā)明的實施例,存在多種不同的元信息。將與元信息一起封裝在請求包中的消息稱為與元信息對應(yīng)的消息,相同的元信息對應(yīng)的消息類型相同或相似,不同的元信息對應(yīng)的消息類型不同或不相似。根據(jù)本發(fā)明的實施例,可以將該類型相同或相似的消息一起批量發(fā)送,而類型不同或不相似的消息需要分別發(fā)送。
[0052]接下來,所述處理和發(fā)送模塊240可以根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0053]根據(jù)本發(fā)明的實施例,若判斷結(jié)果為相同,則所述處理和發(fā)送模塊240將對應(yīng)的消息緩存到緩存文件中;若判斷結(jié)果為不同,則所述處理和發(fā)送模塊240將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
[0054]如果判斷結(jié)果相同,即元信息與之前的請求包的元信息相同,則所述處理和發(fā)送模塊240可以將該元信息對應(yīng)的消息緩存到緩存文件(例如,Batcher, buf文件)中,以準備之前的請求包中的消息一起批量發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0055]而如果判斷結(jié)果不同,即元信息與之前的請求包的元信息不同,需要分別進行發(fā)送,則所述處理和發(fā)送模塊240可以將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。即,所述處理和發(fā)送模塊240將之前緩存在緩存文件中的所有相同類型的消息與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,該服務(wù)器數(shù)據(jù)目錄與該元信息相對應(yīng)。在發(fā)送完成后,所述處理和發(fā)送模塊240可以將所述緩存文件清空,并對所述不同的元信息所對應(yīng)的消息進行緩存處理,將其緩存到緩存文件中。接下來,所述讀取模塊210繼續(xù)讀取下一個請求包,并由所述解析模塊220進行解析以獲取其中的元信息以及消息,并由所述第一判斷模塊230判斷這一元信息是否與現(xiàn)在緩存的消息對應(yīng)的元信息相同,并由所述處理和發(fā)送模塊240進行上述處理。接著,對于下面的請求包重復上述操作。
[0056]根據(jù)本發(fā)明的實施例,所述處理和發(fā)送模塊240可以調(diào)用異步發(fā)送接口(例如,SDK異步發(fā)送接口)將經(jīng)過處理的元信息以及對應(yīng)的消息發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0057]可選地,根據(jù)本發(fā)明的實施例,所述裝置200還可以包括可選模塊:確收和刪除模塊(未在圖2中示出),用于在所述處理和發(fā)送模塊240根據(jù)判斷結(jié)果對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄之后,接收服務(wù)器返回的確收信息,并將所發(fā)送的元信息以及對應(yīng)的消息刪除。由此,可以將已經(jīng)完成發(fā)送的元信息以及消息刪除,減少對于本地磁盤空間的占用。
[0058]可選地,根據(jù)本發(fā)明的一種實施例,所述裝置200還可以包括可選模塊:第二判斷模塊(未在圖2中示出),用于在所述解析模塊220解析所述請求包以獲取元信息以及消息之后,判斷所述元信息所對應(yīng)的消息的最大發(fā)送超時時間是否低于預先定義的閾值;若判斷結(jié)果為是,則所述第二判斷模塊將所述請求包發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。在上述實施例中,所述第二判斷模塊判斷本次讀取和解析的請求包中的元信息所對應(yīng)的消息的最大發(fā)送時間是否低于預先定義的閾值,即,所述第二判斷模塊判斷這種元信息對應(yīng)的消息是否具有較高的發(fā)送實時性的要求,對于這種元信息(及消息),為了不影響發(fā)送實時性,不進行批量發(fā)送,而是直接進行單獨地發(fā)送。上述預先定義的閾值可以根據(jù)實際需要來進行選擇,為了確保較高的發(fā)送實時性,可以選擇較小的閾值;而為了確保較高的發(fā)送性能,則可以選擇較大的閾值。
[0059]可選地,根據(jù)本發(fā)明的一種實施例,所述裝置200還可以包括可選模塊:第三判斷模塊(未在圖2中示出),用于在所述處理和發(fā)送模塊240將對應(yīng)的消息緩存到緩存文件中之后,判斷所緩存的消息大小是否超出預先定義的緩存大小;若判斷結(jié)果為是,則所述第三判斷模塊將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。在上述實施例中,可以保證批量發(fā)送的請求包的大小不至于過大而影響發(fā)送,其中,判斷已經(jīng)緩存的消息的大小是否超出了預先定義的緩存大小,如果已經(jīng)超出,則不再緩存后續(xù)的相同的元信息對應(yīng)的消息,而是直接進行重新封裝和發(fā)送。
[0060]可選地,根據(jù)本發(fā)明的一種實施例,所述裝置200還可以包括可選模塊:第四判斷模塊(未在圖2中示出),用于在所述處理和發(fā)送模塊240將對應(yīng)的消息緩存到緩存文件中之后,判斷是否已經(jīng)超過所緩存的消息的發(fā)送超時時間;若判斷結(jié)果為是,則所述第四判斷模塊將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。在上述實施例中,可以保證較高的發(fā)送實時性,即,保證已經(jīng)緩存的消息不至于發(fā)送超時,一旦判斷已經(jīng)超過所緩存的消息的發(fā)送超時時間,就不再緩存后續(xù)的相同的元信息對應(yīng)的消息,而是直接進行重新封裝和發(fā)送。
[0061]本發(fā)明提供了上述批量發(fā)送消息的方法和裝置,根據(jù)本發(fā)明的實施例,可以讀取待發(fā)送的已經(jīng)封裝的請求包,解析所述請求包以獲取元信息以及消息,判斷所述元信息是否與之前的請求包的元信息相同,并根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。由此,可以針對元信息相同的消息進行批量處理,一起發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,減少了網(wǎng)絡(luò)延遲,大幅提升了發(fā)送性能。另外,根據(jù)本發(fā)明的各可選實施例,由于采取了單個緩存文件的方式,在消息未發(fā)送成功時容易執(zhí)行回滾操作;在接收到服務(wù)器返回的確收信息后刪除元信息及消息,降低了對本地磁盤的占用;還能夠針對消息發(fā)送超時時間以及所緩存的消息大小的情況,進行不同的有針對性的處理,確保了發(fā)送實時性以及發(fā)送成功率。
[0062]在此提供的方法和裝置不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
[0063]在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
[0064]類似地,應(yīng)當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循【具體實施方式】的權(quán)利要求書由此明確地并入該【具體實施方式】,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
[0065]本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的裝置中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個裝置中??梢园褜嵤├械娜舾赡K組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者模塊中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的替代特征來代替。
[0066]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
[0067]本發(fā)明的各個裝置實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的裝置中的一些或者全部模塊的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
[0068]應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”或“包括”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
[0069]本發(fā)明還公開了:
[0070]A1.一種批量發(fā)送消息的方法,應(yīng)用于分布式消息系統(tǒng),包括:
[0071]讀取待發(fā)送的已經(jīng)封裝的請求包;
[0072]解析所述請求包,以獲取元信息以及消息;
[0073]判斷所述元信息是否與之前的請求包的元信息相同;以及
[0074]根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0075]A2.如權(quán)利要求A1所述的方法,其中所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟包括:
[0076]若判斷結(jié)果為相同,則將對應(yīng)的消息緩存到緩存文件中;
[0077]若判斷結(jié)果為不同,則將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
[0078]A3.如權(quán)利要求A1所述的方法,其中在所述讀取待發(fā)送的已經(jīng)封裝的請求包的步驟之前,所述方法還包括:將單個消息與元信息封裝為請求包。
[0079]A4.如權(quán)利要求A1至A3中的任一項所述的方法,其中在所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟中,調(diào)用異步發(fā)送接口將經(jīng)過處理的元信息以及對應(yīng)的消息發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0080]A5.如權(quán)利要求A1至A3中的任一項所述的方法,其中在所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟之后,所述方法還包括:
[0081]接收服務(wù)器返回的確收信息,并將所發(fā)送的元信息以及對應(yīng)的消息刪除。
[0082]A6.如權(quán)利要求A1至A3中的任一項所述的方法,其中在所述解析所述請求包以獲取元信息以及消息的步驟之后,所述方法還包括:
[0083]判斷所述元信息所對應(yīng)的消息的最大發(fā)送超時時間是否低于預先定義的閾值;以及
[0084]若判斷結(jié)果為是,則將所述請求包發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0085]A7.如權(quán)利要求A2所述的方法,其中在所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還包括:
[0086]判斷所緩存的消息大小是否超出預先定義的緩存大小;以及
[0087]若判斷結(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0088]A8.如權(quán)利要求A2所述的方法,其中在所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還包括:
[0089]判斷是否已經(jīng)超過所緩存的消息的發(fā)送超時時間;以及
[0090]若判斷結(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0091]B9.一種批量發(fā)送消息的裝置,應(yīng)用于分布式消息系統(tǒng),包括:
[0092]讀取模塊,用于讀取待發(fā)送的已經(jīng)封裝的請求包;
[0093]解析模塊,用于解析所述請求包,以獲取元信息以及消息;
[0094]第一判斷模塊,用于判斷所述元信息是否與之前的請求包的元信息相同;以及
[0095]處理和發(fā)送模塊,用于根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0096]B10.如權(quán)利要求B9所述的裝置,其中處理和發(fā)送模塊:
[0097]在判斷結(jié)果為相同的情況下,將對應(yīng)的消息緩存到緩存文件中;
[0098]在判斷結(jié)果為不同的情況下,將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
[0099]B11.如權(quán)利要求B9所述的裝置,還包括封裝模塊,用于將單個消息與元信息封裝為請求包。
[0100]B12.如權(quán)利要求B9至B11中的任一項所述的裝置,其中所述處理和發(fā)送模塊調(diào)用異步發(fā)送接口將經(jīng)過處理的元信息以及對應(yīng)的消息發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0101]B13.如權(quán)利要求B9至B11中的任一項所述的裝置,還包括確收和刪除模塊,用于接收服務(wù)器返回的確收信息,并將所發(fā)送的元信息以及對應(yīng)的消息刪除。
[0102]B14.如權(quán)利要求B9至B11中的任一項所述的裝置,還包括第二判斷模塊,用于在所述解析模塊解析所述請求包以獲取元信息以及消息之后,判斷所述元信息所對應(yīng)的消息的最大發(fā)送超時時間是否低于預先定義的閾值,并且
[0103]在判斷結(jié)果為是的情況下,所述處理和發(fā)送模塊將所述請求包發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0104]B15.如權(quán)利要求B10所述的裝置,還包括第三判斷模塊,用于在所述處理和發(fā)送模塊將對應(yīng)的消息緩存到緩存文件中之后,判斷所緩存的消息大小是否超出預先定義的緩存大小,并且
[0105]在判斷結(jié)果為是的情況下,所述處理和發(fā)送模塊將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
[0106]B16.如權(quán)利要求B10所述的裝置,還包括第四判斷模塊,用于在所述處理和發(fā)送模塊將對應(yīng)的消息緩存到緩存文件中之后,判斷是否已經(jīng)超過所緩存的消息的發(fā)送超時時間,并且
[0107]在判斷結(jié)果為是的情況下,所述處理和發(fā)送模塊將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
【權(quán)利要求】
1.一種批量發(fā)送消息的方法,應(yīng)用于分布式消息系統(tǒng),包括: 讀取待發(fā)送的已經(jīng)封裝的請求包; 解析所述請求包,以獲取元信息以及消息; 判斷所述元信息是否與之前的請求包的元信息相同;以及 根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
2.如權(quán)利要求1所述的方法,其中所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟包括: 若判斷結(jié)果為相同,則將對應(yīng)的消息緩存到緩存文件中; 若判斷結(jié)果為不同,則將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
3.如權(quán)利要求1所述的方法,其中在所述讀取待發(fā)送的已經(jīng)封裝的請求包的步驟之前,所述方法還包括:將單個消息與元信息封裝為請求包。
4.如權(quán)利要求1至3中的任一項所述的方法,其中在所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟中,調(diào)用異步發(fā)送接口將經(jīng)過處理的元信息以及對應(yīng)的消息發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
5.如權(quán)利要求1至3中的任一項所述的方法,其中在所述根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄的步驟之后,所述方法還包括: 接收服務(wù)器返回的確收信息,并將所發(fā)送的元信息以及對應(yīng)的消息刪除。
6.如權(quán)利要求1至3中的任一項所述的方法,其中在所述解析所述請求包以獲取元信息以及消息的步驟之后,所述方法還包括: 判斷所述元信息所對應(yīng)的消息的最大發(fā)送超時時間是否低于預先定義的閾值;以及 若判斷結(jié)果為是,則將所述請求包發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
7.如權(quán)利要求2所述的方法,其中在所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還包括: 判斷所緩存的消息大小是否超出預先定義的緩存大小;以及 若判斷結(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
8.如權(quán)利要求2所述的方法,其中在所述將對應(yīng)的消息緩存到緩存文件中的步驟之后,所述方法還包括: 判斷是否已經(jīng)超過所緩存的消息的發(fā)送超時時間;以及 若判斷結(jié)果為是,則將所緩存的消息與元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
9.一種批量發(fā)送消息的裝置,應(yīng)用于分布式消息系統(tǒng),包括: 讀取模塊,用于讀取待發(fā)送的已經(jīng)封裝的請求包; 解析模塊,用于解析所述請求包,以獲取元信息以及消息; 第一判斷模塊,用于判斷所述元信息是否與之前的請求包的元信息相同;以及 處理和發(fā)送模塊,用于根據(jù)判斷結(jié)果,對元信息以及對應(yīng)的消息進行處理并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄。
10.如權(quán)利要求9所述的裝置,其中處理和發(fā)送模塊: 在判斷結(jié)果為相同的情況下,將對應(yīng)的消息緩存到緩存文件中; 在判斷結(jié)果為不同的情況下,將所述緩存文件與對應(yīng)的元信息重新封裝為請求包,并發(fā)送到相應(yīng)的服務(wù)器數(shù)據(jù)目錄,并將所述緩存文件清空,將所述不同的元信息所對應(yīng)的消息緩存到緩存文件中。
【文檔編號】H04L29/08GK104468841SQ201410850953
【公開日】2015年3月25日 申請日期:2014年12月30日 優(yōu)先權(quán)日:2014年12月30日
【發(fā)明者】喬俊龍, 陳飛 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司