一種基于消息中間件的消息管理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,特別涉及一種基于消息中間件的消息管理方法及
目.0
【背景技術(shù)】
[0002]消息中間件是一種支持與保障分布式應(yīng)用程序之間同步/異步收發(fā)消息的工具,消息中間件通過消息隊(duì)列接收并存儲(chǔ)對(duì)應(yīng)消息發(fā)送端的應(yīng)用程序發(fā)送的消息,存儲(chǔ)在消息隊(duì)列中的消息可以被對(duì)應(yīng)接收端的應(yīng)用程序讀取,消息隊(duì)列通常設(shè)置在計(jì)算機(jī)磁盤中,消息隊(duì)列收發(fā)消息對(duì)應(yīng)于應(yīng)用程序?qū)Υ疟P的讀寫操作。
[0003]當(dāng)消息隊(duì)列設(shè)置在磁盤中時(shí),無論是將磁盤中的任一文件或在磁盤中設(shè)置相應(yīng)的數(shù)據(jù)庫(kù)以作為消息隊(duì)列,寫入磁盤的數(shù)據(jù)即消息隊(duì)列接收到的消息不易丟失,但是,應(yīng)用程序讀寫磁盤的速度較慢,收發(fā)消息的效率很低。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種基于消息中間件的消息存儲(chǔ)方法及裝置,能夠提高消息中間件收發(fā)消息的效率。
[0005]第一方面,本發(fā)明提供了一種基于消息中間加你的消息管理方法,包括:
[0006]SO:在計(jì)算機(jī)磁盤中設(shè)置第一消息隊(duì)列文件,該第一消息隊(duì)列文件對(duì)應(yīng)消息中間件的消息隊(duì)列;將所述第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中,以生成計(jì)算機(jī)內(nèi)存中的第二消息隊(duì)列文件;
[0007]S1:利用計(jì)算機(jī)內(nèi)存中的所述第二消息隊(duì)列文件,接收應(yīng)用程序發(fā)送的消息以及向應(yīng)用程序發(fā)送消息;
[0008]S2:將利用計(jì)算機(jī)內(nèi)存中的所述第二消息隊(duì)列文件接收和發(fā)送的每一個(gè)消息,同步到計(jì)算機(jī)磁盤中的第一消息隊(duì)列文件。
[0009]進(jìn)一步的,所述將所述第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中之前,還包括:
[0010]設(shè)置內(nèi)存池,將計(jì)算機(jī)內(nèi)存池劃分成若干個(gè)內(nèi)存塊;
[0011]根據(jù)所述第一消息隊(duì)列文件的大小預(yù)先從內(nèi)存池中申請(qǐng)用于生成第二消息隊(duì)列文件的目標(biāo)內(nèi)存塊;
[0012]建立目標(biāo)內(nèi)存塊與第一消息隊(duì)列文件的地址信息的映射關(guān)系。
[0013]進(jìn)一步的,將所述第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中,以生成計(jì)算機(jī)內(nèi)存中的第二消息隊(duì)列文件,包括:
[0014]根據(jù)所述映射關(guān)系,將第一消息隊(duì)列文件映射至目標(biāo)內(nèi)存塊中以在所述目標(biāo)內(nèi)存塊中生成第二消息隊(duì)列文件。
[0015]第二方面,本發(fā)明提供了一種基于消息中間件的消息管理裝置,包括:
[0016]磁盤、內(nèi)存、處理器;
[0017]其中,
[0018]所述磁盤中包括第一消息隊(duì)列文件,該第一消息隊(duì)列文件對(duì)應(yīng)消息中間件的消息隊(duì)列;
[0019]所述處理器,用于將所述第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中,以生成計(jì)算機(jī)內(nèi)存中的第二消息隊(duì)列文件;利用計(jì)算機(jī)內(nèi)存中的所述第二消息隊(duì)列文件,接收應(yīng)用程序發(fā)送的消息以及向應(yīng)用程序發(fā)送消息;將利用計(jì)算機(jī)內(nèi)存中的所述第二消息隊(duì)列文件接收和發(fā)送的每一個(gè)消息,同步到計(jì)算機(jī)磁盤中的第一消息隊(duì)列文件。
[0020]進(jìn)一步的,
[0021]所述內(nèi)存包括若干個(gè)內(nèi)存塊;
[0022]所述處理器,進(jìn)一步用于根據(jù)所述第一消息隊(duì)列文件的大小預(yù)先從內(nèi)存池中申請(qǐng)用于生成第二消息隊(duì)列文件的目標(biāo)內(nèi)存塊;建立目標(biāo)內(nèi)存塊與第一消息隊(duì)列文件的地址信息的映射關(guān)系。
[0023]進(jìn)一步的,
[0024]所述處理器,進(jìn)一步用于當(dāng)消息隊(duì)列管理服務(wù)啟動(dòng)后,根據(jù)所述映射關(guān)系將第一消息隊(duì)列文件映射至目標(biāo)內(nèi)存塊以在所述目標(biāo)內(nèi)存塊中生成第二消息隊(duì)列文件。
[0025]通過本發(fā)明的一種基于消息中間件的消息管理方法及裝置,在計(jì)算機(jī)磁盤中設(shè)置第一消息隊(duì)列文件,該第一消息隊(duì)列文件對(duì)應(yīng)消息中間件的消息隊(duì)列,當(dāng)消息隊(duì)列管理服務(wù)啟動(dòng)后,將該第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中以生成第二消息隊(duì)列文件,消息中間件即可通過該第二消息隊(duì)列文件收發(fā)消息,即對(duì)應(yīng)的應(yīng)用程序可直接在內(nèi)存中讀寫消息,進(jìn)而提高消息中間件收發(fā)消息的效率。
【附圖說明】
[0026]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0027]圖1是本發(fā)明一實(shí)施例提供的一種基于消息中間件的消息管理方法的流程圖;
[0028]圖2是本發(fā)明一實(shí)施例提供的另一種基于消息中間件的消息管理方法的流程圖;
[0029]圖3是本發(fā)明一實(shí)施例提供的一種基于消息中間件的消息管理裝置。
【具體實(shí)施方式】
[0030]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0031]如圖1所示,本發(fā)明實(shí)施例提供了一種基于消息中間件的消息管理方法,該方法可以包括以下步驟:
[0032]SO:在計(jì)算機(jī)磁盤中設(shè)置第一消息隊(duì)列文件,該第一消息隊(duì)列文件對(duì)應(yīng)消息中間件的消息隊(duì)列;將所述第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中,以生成計(jì)算機(jī)內(nèi)存中的第二消息隊(duì)列文件;
[0033]S1:利用計(jì)算機(jī)內(nèi)存中的所述第二消息隊(duì)列文件,接收應(yīng)用程序發(fā)送的消息以及向應(yīng)用程序發(fā)送消息;
[0034]S2:將利用計(jì)算機(jī)內(nèi)存中的所述第二消息隊(duì)列文件接收和發(fā)送的每一個(gè)消息,同步到計(jì)算機(jī)磁盤中的第一消息隊(duì)列文件。
[0035]通過本發(fā)明實(shí)施例提供的一種基于消息中間件的消息管理方法,在計(jì)算機(jī)磁盤中設(shè)置第一消息隊(duì)列文件,該第一消息隊(duì)列文件對(duì)應(yīng)消息中間件的消息隊(duì)列,當(dāng)消息隊(duì)列管理服務(wù)啟動(dòng)后,將該第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中以生成第二消息隊(duì)列文件,消息中間件即可通過該第二消息隊(duì)列文件收發(fā)消息,即對(duì)應(yīng)的應(yīng)用程序可直接在內(nèi)存中讀寫消息,進(jìn)而提高消息中間件收發(fā)消息的效率。
[0036]進(jìn)一步的,為了確保當(dāng)消息隊(duì)列管理服務(wù)啟動(dòng)后,可快速的將設(shè)置在磁盤中的第一消息隊(duì)列映射至計(jì)算機(jī)內(nèi)存中,提高工作效率,本發(fā)明一個(gè)優(yōu)選實(shí)施里中,所述將所述第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中之前,還包括:
[0037]設(shè)置內(nèi)存池,將計(jì)算機(jī)內(nèi)存池劃分成若干個(gè)內(nèi)存塊;
[0038]根據(jù)所述第一消息隊(duì)列文件的大小預(yù)先從內(nèi)存池中申請(qǐng)用于生成第二消息隊(duì)列文件的目標(biāo)內(nèi)存塊;
[0039]建立目標(biāo)內(nèi)存塊與第一消息隊(duì)列文件的地址信息的映射關(guān)系。
[0040]本發(fā)明實(shí)施例中,一方面,根據(jù)第一消息隊(duì)列文件的大小預(yù)先申請(qǐng)用于生成第二消息隊(duì)列的目標(biāo)內(nèi)存塊,避免當(dāng)消息隊(duì)列管理服務(wù)啟動(dòng)后,還需要時(shí)間等待分配內(nèi)存以生成第二消息隊(duì)列文件,而且,由于將計(jì)算機(jī)磁盤中的第一消息隊(duì)列文件映射至計(jì)算機(jī)內(nèi)存中時(shí),需要占用連續(xù)性的內(nèi)存空間,當(dāng)計(jì)算機(jī)內(nèi)存中存在大量?jī)?nèi)存碎片時(shí),可能導(dǎo)致無法將計(jì)算機(jī)磁盤中的第一消息隊(duì)列映射至計(jì)算機(jī)內(nèi)存中,通過預(yù)先申請(qǐng)目標(biāo)內(nèi)存塊,可避免這種意外情況的發(fā)生導(dǎo)致消息中間件無法快速開始工作;
[0041]另一方面,預(yù)先建立目標(biāo)內(nèi)存塊與第一消息隊(duì)列文件的地址信息的映射關(guān)系,當(dāng)消息隊(duì)列管理服務(wù)啟動(dòng)后,可根據(jù)所述映射關(guān)系,將第一消息隊(duì)列文件映射至目標(biāo)內(nèi)存塊中以在所述目標(biāo)內(nèi)存塊中生成第二消息隊(duì)列文件。
[0042]具體地,可根據(jù)預(yù)先建立的目標(biāo)內(nèi)存塊與第一消息隊(duì)列文件的地址信息的映射關(guān)系將第一消息隊(duì)列文件整體映射至內(nèi)存中,不必通過調(diào)用1函數(shù)等將第一消息隊(duì)列文件下的每一條數(shù)據(jù)分別提取至內(nèi)存,快速完成第一消息隊(duì)列與計(jì)算機(jī)內(nèi)存進(jìn)行映射的過程,進(jìn)一步提高工作效率。
[0043]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0044]如圖2所示,本發(fā)明實(shí)施例提供了另一種基于消息中間件的消息管理方法,該方法可以包括以下步驟:
[0045]步驟201,在計(jì)算機(jī)磁盤中設(shè)置第一消息隊(duì)列文件,該第一消息隊(duì)列文件對(duì)應(yīng)消息中間件的消息隊(duì)列。
[0046]需要說明的是,由于在消息隊(duì)列管理服務(wù)啟動(dòng)時(shí),需要將該第一消息隊(duì)列文件的全部?jī)?nèi)容都映射至計(jì)算機(jī)內(nèi)存中,為了節(jié)省內(nèi)存空間,第一消息隊(duì)列文件中不應(yīng)包括其他與消息中間件收發(fā)消息無關(guān)的數(shù)據(jù)。
[0047]步驟202,將計(jì)算機(jī)內(nèi)存池劃分成若干個(gè)內(nèi)存塊。
[0048]步驟203,根據(jù)所述第一消息隊(duì)列文件的大小預(yù)先從內(nèi)存池中申請(qǐng)用于生成第二消息隊(duì)列文件的目標(biāo)內(nèi)存塊。
[0049]由于第二消息隊(duì)列文件需要在內(nèi)存中占用連續(xù)性的內(nèi)存空間,因此,應(yīng)確保目標(biāo)內(nèi)存塊不小于第一消息隊(duì)列文件的大小。
[0050]步驟204,建立目標(biāo)內(nèi)存塊與第一消息隊(duì)列文件的地址信息的映射關(guān)系。
[0051]步驟205,根據(jù)所述映射關(guān)系,將第一消息隊(duì)列文件映射至目標(biāo)內(nèi)存塊中以在所述目標(biāo)內(nèi)存塊中生成第二消息隊(duì)列文件。
[0052]步驟204和步驟205中,通過設(shè)置目標(biāo)內(nèi)存塊與第一消息隊(duì)列文件的地址信息的映射關(guān)系,可根據(jù)該映射關(guān)系完成整個(gè)第一消息隊(duì)列文件的映射而不需要調(diào)用1函數(shù)將第一消息隊(duì)列中的數(shù)據(jù)分別提取至計(jì)算機(jī)內(nèi)存中;
[0053]比如,第一消息隊(duì)列文件在磁盤中對(duì)應(yīng)的地址分別為A、B和C,對(duì)應(yīng)存儲(chǔ)關(guān)系為地址A存儲(chǔ)數(shù)據(jù)1、地址B存儲(chǔ)數(shù)據(jù)2、地址C對(duì)應(yīng)的數(shù)據(jù)為空,目標(biāo)內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)單元包括0000a、0000b和0000c,預(yù)先建立對(duì)應(yīng)關(guān)系為硬盤地址A上的數(shù)據(jù)對(duì)應(yīng)目標(biāo)內(nèi)存塊中存儲(chǔ)單元OOOOa的數(shù)據(jù),同理,B對(duì)應(yīng)0000b,C對(duì)應(yīng)0000c,當(dāng)消息中間件開始工作,則可根據(jù)預(yù)先建立的對(duì)應(yīng)關(guān)系將數(shù)據(jù)I和2提取至目標(biāo)內(nèi)存塊下的對(duì)應(yīng)地址中,存儲(chǔ)單元OOOOc為空,但依然保持與硬盤地址C的對(duì)應(yīng)關(guān)系。
[0054]步驟206,利用目標(biāo)內(nèi)存塊中的第二消息隊(duì)列文件,接收應(yīng)用程序發(fā)送的消息。
[0055]步驟207,利用目標(biāo)內(nèi)存塊中的第二消息隊(duì)列文件向應(yīng)用程序發(fā)送消息信息。
[0056]需要說明的是,步驟206和步驟207中,第二消息隊(duì)列文件收發(fā)消息可同時(shí)進(jìn)行。
[0057]步驟208,同步目標(biāo)內(nèi)存塊中的第二消息隊(duì)列文件中的消息和計(jì)算機(jī)磁盤中的第一消息隊(duì)列文件中的消息。
[0058]這里,可通過步驟204和步驟205中建立的映射關(guān)系快速同步第一消息