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