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