本發(fā)明涉及網(wǎng)絡通信技術領域,尤其涉及一種基于消息隊列的路由建立方法及系統(tǒng)。
背景技術:
消息中間件作為中間件技術的一種重要形式,為應用系統(tǒng)提供可靠的消息通信手段,實現(xiàn)不同操作系統(tǒng)平臺、庫和硬件系統(tǒng)平臺的通信。
作為消息中間件的一種,消息隊列(Message queue,MQ)技術是分布式應用間交換信息的一種技術。消息隊列可駐留在內存或者磁盤上,消息發(fā)送者把消息放入消息隊列,消息接收者從消息隊列中取出消息。可以為消息隊列定義消息的出入順序,例如先進先出或按優(yōu)先級等。
在MQ系統(tǒng)中,消息隊列定義在隊列管理器中,并由其進行管理。由隊列管理器提供基于隊列的消息服務。隊列管理器中的消息隊列包括本地隊列和遠程隊列。本地隊列是應用程序通過應用程序編程接口(API)對其進行讀寫操作的隊列;遠程隊列是目的隊列在本地的定義,它類似一個地址指針,指向遠程主機上的某個目的隊列。
圖1示出了現(xiàn)有的采用消息隊列技術進行消息分發(fā)的過程。參見圖1,在步驟S11中,第一應用程序(APP1)將消息發(fā)送至APP1所連接隊列管理器1(QM1)中的遠程隊列;在步驟S12中,所述消息通過消息隊列網(wǎng)絡被發(fā)送至第二應用程序(APP2)所連接隊列管理器2(QM2)中的本地隊列,該本地隊列即是QM1中的遠程隊列所指向的目的隊列;在步驟S13中,APP2從所述本地隊列中讀取到APP1傳輸?shù)南ⅲ辉诓襟ES14中,APP2將所述消息的回復消息發(fā)送至QM2中的遠程隊列;在步驟S15中,所述回復消息經(jīng)過消息隊列網(wǎng)絡被傳輸至QM1中的本地隊列,該本地隊列即是QM2中的遠程隊列所指向的目的隊列;在步驟S16中,APP1從QM1中的本地隊列中讀取所述回復消息。
上述過程的不足之處在于,在APP1發(fā)送消息至遠程隊列之前,APP1需要從系統(tǒng)管理員處預先獲取到達遠端應用,也就是APP2的路由信息。典型的,系統(tǒng)管理員會以顯式的方式將上述路由信息通知給APP1。也就是說,在應用程序之間執(zhí)行消息的交互之前,在應用程序上需要預先保存有到遠端應用程序的路由信息,使得基于消息隊列的應用程序的開發(fā)比較困難,并且,在消息隊列之間的拓撲結構發(fā)生變化時,需要相應更改應用程序上的路由信息,而上述更改過程經(jīng)常需要花費多余的時間。
技術實現(xiàn)要素:
針對上述技術問題,本發(fā)明實施例提供了一種基于消息隊列的路由建立方法及系統(tǒng),以實現(xiàn)通過應用程序代理自動構建基于消息隊列的路由信息。
一方面,本發(fā)明實施例提供了一種基于消息隊列的路由建立方法,所述方法包括:
第一應用程序代理將路由探測消息發(fā)送至第一應用程序代理所連接隊列管理器中的遠程隊列;
第二應用程序代理從第二應用程序代理所連接隊列管理器中的本地隊列讀取到所述路由探測消息后,解析該路由探測消息,根據(jù)解析結果確定并生成到第一應用程序代理的第一路由信息,并根據(jù)該第一路由信息向第二應用程序代理所連接隊列管理器中的遠程隊列發(fā)送回復消息;以及,
第一應用程序代理從所述第一應用程序代理所連接隊列管理器中的本地隊列讀取到所述回復消息后,解析該回復消息,根據(jù)解析結果生成到第二應用程序代理的第二路由信息。
另一方面,本發(fā)明實施例還提供了一種基于消息隊列的路由建立系統(tǒng),所述系統(tǒng)包括:
第一應用程序代理,用于將路由探測消息發(fā)送至第一應用程序代理所連接隊列管理器中的遠程隊列;以及,
第二應用程序代理,用于從第二應用程序代理所連接隊列管理器中的本地隊列讀取到所述路由探測消息后,解析該路由探測消息,根據(jù)解析結果確定并生成到第一應用程序代理的第一路由信息,并根據(jù)該第一路由信息向第二應用程序代理所連接隊列管理器中的遠程隊列發(fā)送回復消息;
其中,所述第一應用程序代理從所述第一應用程序代理所連接隊列管理器中的本地隊列讀取到所述回復消息后,解析該回復消息,根據(jù)解析結果生成到所述第二應用程序代理的第二路由信息。
本發(fā)明提供的基于消息隊列的路由建立方法及系統(tǒng)中,第一應用程序代理向第二應用程序代理發(fā)送路由探測消息,使得第二應用程序代理根據(jù)路由探測消息建立了到第一應用程序代理的路由信息,以及,第二應用程序代理向第一應用程序代理發(fā)送回復消息,使得第一應用程序代理根據(jù)回復消息建立了到第二應用程序代理的路由信息,從而實現(xiàn)了通過應用程序代理自動構建基于消息隊列的路由信息,應用程序之間進行通信前不需要預先從系統(tǒng)管理員處獲得路由信息,使得基于消息隊列的應用程序的開發(fā)更加容易,并且使得應用程序代理上的路由信息能夠根據(jù)消息隊列之間的拓撲結構的變化而隨之進行動態(tài)更新。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯:
圖1是現(xiàn)有技術提供的應用程序之間的消息交互過程的流程示意圖;
圖2是本發(fā)明第一實施例提供的基于消息隊列的路由建立方法的流程示意圖;
圖3是本發(fā)明第二實施例提供的基于消息隊列的路由建立方法的流程示意圖;
圖4是本發(fā)明第三實施例提供的基于消息隊列的路由建立方法的流程示意圖;
圖5是本發(fā)明第四實施例提供的基于消息隊列的路由建立系統(tǒng)的網(wǎng)絡拓撲圖。
具體實施方式
下面結合附圖和實施例對本發(fā)明作進一步的詳細說明。可以理解的是,此處所描述的具體實施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關的部分而非全部結構。
第一實施例
圖2示出了本發(fā)明第一實施例提供的基于消息隊列的路由建立方法的流程圖。在本實施例中,預先在需要通信的兩個應用程序即第一應用程序和第二應用程序之間建立兩個代理(agent),為第一應用程序建立的代理為第一應用程序代理,為第二應用程序建立的代理為第二應用程序代理。第一應用程序代理與第一應用程序本地的至少一個隊列管理器連接,第二應用程序代理與第二應用程序本地的至少一個隊列管理器連接,各隊列管理器對其中的本地隊列和遠程隊列進行管理。
參見圖2,本實施例的基于消息隊列的路由建立方法包括以下步驟:
步驟21:第一應用程序代理將路由探測消息發(fā)送至第一應用程序代理所連接隊列管理器中的遠程隊列;
本步驟中,第一應用程序代理在啟動后,向第一應用程序代理所連接隊列管理器中的遠程隊列發(fā)送路由探測消息,向遠程隊列發(fā)送的路由探測消息中可以包含第一應用程序代理的標識、第一應用程序代理所連接隊列管理器的標識、第一應用程序代理所連接隊列管理器中的本地隊列的標識以及該遠程隊列的標識。
在第一應用程序代理發(fā)送的路由探測消息被發(fā)送至第一應用程序代理所連接隊列管理器中的遠程隊列后,該遠程隊列中的路由探測消息通過消息隊列網(wǎng)絡被發(fā)送到第二應用程序代理所連接隊列管理器中的本地隊列,該本地隊列是路由探測消息中的遠程隊列所指向的目的隊列。
步驟22:第二應用程序代理從第二應用程序代理所連接隊列管理器中的本地隊列讀取到所述路由探測消息后,解析該路由探測消息,根據(jù)解析結果確定并生成到第一應用程序代理的第一路由信息,并根據(jù)該第一路由信息向第二應用程序代理所連接隊列管理器中的遠程隊列發(fā)送回復消息;
本步驟中,第二應用程序代理在啟動后處理第二應用程序代理所連接隊列管理器中的本地隊列接收到的路由探測消息。
首先,第二應用程序代理通過解析路由探測消息,可以得到第一應用程序代理的標識、第一應用程序代理所連接隊列管理器的標識、第一應用程序代理所連接隊列管理器中的本地隊列的標識以及第一應用程序代理所連接隊列管理器中的遠程隊列的標識。
然后,第二應用程序代理根據(jù)本地預先保存的配置信息確定第二應用程序代理所連接隊列管理器中的、與解析出的第一應用程序代理所連接隊列管理器和所述第一應用程序代理所連接隊列管理器中的本地隊列所對應的遠程隊列,該遠程隊列即是指向解析出的第一應用程序代理所連接隊列管理器中的本地隊列的遠程隊列。
接下來,第二應用程序代理根據(jù)確定的遠程隊列生成第二應用程序代理到第一應用程序代理的路由信息即第一路由信息,第一路由信息指示第二應用程序代理可以通過確定的遠程隊列向第一應用程序代理發(fā)送消息。第二應用程序代理將生成的第一路由信息加入到本地的第一路由表中。
后續(xù)第二應用程序在需要通過第二應用程序代理向第一應用程序代理發(fā)送消息時,第二應用程序將消息發(fā)送給第二應用程序代理,第二應用程序代理通過查詢本地的第一路由表獲得到第一應用程序代理的路由信息,并將消息發(fā)送到該路由信息所指示的位于第二應用程序代理所連接的隊列管理器中的遠程隊列,該消息通過消息隊列網(wǎng)絡被發(fā)送到第一應用程序代理所連接隊列管理器中的本地隊列,然后第一應用程序代理從該本地隊列讀取消息后發(fā)送給第一應用程序。這里需要說明的是,如果第二應用程序代理通過查詢本地的第一路由表獲得多條到第一應用程序代理的路由信息,則可以按照預先設定的路由選擇機制來選擇其中一條路由信息并使用選擇的路由信息向第一應用程序代理發(fā)送消息。
第二應用程序代理在確定遠程隊列后,向該遠程隊列發(fā)送回復消息,該回復消息中可以包含第二應用程序代理的標識和路由探測消息中包含的第一應用程序代理所連接隊列管理器中的遠程隊列的標識。在回復消息被發(fā)送至第二應用程序代理所連接隊列管理器中的遠程隊列后,該遠程隊列中的回復消息通過消息隊列網(wǎng)絡被發(fā)送到第一應用程序代理所連接隊列管理器中的本地隊列。
步驟23:第一應用程序代理從所述第一應用程序代理所連接隊列管理器中的本地隊列接收到回復消息后,解析該回復消息,根據(jù)解析結果生成到第二應用程序代理的第二路由信息。
本步驟中,第一應用程序代理通過解析第一應用程序代理發(fā)送的回復消息,得到第二應用程序代理的標識和第一應用程序代理所連接隊列管理器中的遠程隊列的標識。第一應用程序代理根據(jù)解析到的信息生成第一應用程序代理到第二應用程序代理的路由信息即第二路由信息,第二路由信息指示第一應用程序代理可以通過回復消息中包含的遠程隊列向第二應用程序代理發(fā)送消息。第一應用程序代理將生成的第二路由信息加入到本地的第二路由表中。
后續(xù)第一應用程序在需要通過第一應用程序代理向第二應用程序代理發(fā)送消息時,第一應用程序將消息發(fā)送給第一應用程序代理,第一應用程序代理通過查詢本地的第二路由表獲得到第二應用程序代理的路由信息,并將消息發(fā)送到該路由信息所指示的位于第一應用程序代理所連接的隊列管理器中的遠程隊列,該消息通過消息隊列網(wǎng)絡被發(fā)送到第二應用程序代理所連接隊列管理器中的本地隊列,然后第二應用程序代理從該本地隊列讀取消息后發(fā)送給第二應用程序。這里需要說明的是,如果第一應用程序代理通過查詢本地的第二路由表獲得多條到第二應用程序代理的路由信息,則可以根據(jù)預先設定的路由選擇機制來選擇其中一條路由信息并使用選擇的路由信息向第二應用程序代理發(fā)送消息。
本實施例中,第一應用程序代理向第二應用程序代理發(fā)送路由探測消息,使得第二應用程序代理根據(jù)路由探測消息建立了到第一應用程序代理的路由信息,以及,第二應用程序代理向第一應用程序代理發(fā)送回復消息,使得第一應用程序代理根據(jù)回復消息建立了到第二應用程序代理的路由信息,從而實現(xiàn)了通過應用程序代理自動構建基于消息隊列的路由信息,應用程序之間進行通信前不需要預先從系統(tǒng)管理員處獲得路由信息,使得基于消息隊列的應用程序的開發(fā)更加容易,并且使得應用程序代理上的路由信息能夠根據(jù)消息隊列之間的拓撲結構的變化而隨之進行動態(tài)更新。
第二實施例
圖3示出了本發(fā)明第二實施例提供的基于消息隊列的路由建立方法的流程示意圖。在本實施例中,第一應用程序(APP1)與第一應用程序代理(agent1)相關聯(lián),agent1與隊列管理器1(QM1)相連接,QM1中設置有遠程隊列2(RQ2)和本地隊列1(QL1);第二應用程序(APP2)與第二應用程序代理(agent2)相關聯(lián),agent2與隊列管理器2(QM2)相連接,QM2中設置有遠程隊列1(RQ1)和本地隊列2(QL2);本實施例中的應用程序代理與隊列管理器之間是一對一的關系。本實施例給出了agent1與agent2之間的路由信息的建立方法,參見圖3,該方法包括如下步驟:
步驟31:agent1在啟動后向RQ2發(fā)送路由探測消息,該路由探測消息中包含agent1的標識、QM1的標識、QL1的標識以及RQ2的標識,即路由探測消息中包含如下一組信息(agent1,QM1,QL1,RQ2);
步驟32:在路由探測消息被發(fā)送至RQ2后,RQ2中的路由探測消息通過消息隊列(MQ)網(wǎng)絡被發(fā)送到QL2;
步驟33:agent2在啟動后從QL2中讀取路由探測消息;
agent2解析讀取到的路由探測消息,得到信息組(agent1,QM1,QL1,RQ2),確定QM2中的與QM1和QL1對應的遠程隊列為RQ1;生成agent2到agent1的路由信息,該路由信息中包含QM2、RQ1與agent1的對應關系,即(QM2,RQ1->agent1);如果本地的第一路由表中沒有與生成的該路由信息完全相同的路由信息,則將生成的路由信息寫入本地的第一路由表中,否則丟棄生成的路由信息;
步驟34:agent2向RQ1發(fā)送回復消息,該回復消息中包含agent2的標識和RQ2的標識,即回復消息中包含如下一組信息(agent2,RQ2);當然,回復消息中還可以包含QM2和QL2的標識信息。
步驟35:在回復消息被發(fā)送至RQ1后,RQ1中的回復消息通過消息隊列網(wǎng)絡被發(fā)送到QL1。
步驟36:agent1從QL1中讀取回復消息;
agent1解析讀取到的回復消息,得到消息組(agent2,RQ2),生成agent1到agent2的路由信息,該路由信息中包含QM1、RQ2與agent2的對應關系,即(QM1,RQ2->agent2);如果agent1本地的第二路由表中沒有與生成的該路由信息完全相同的路由信息,則將生成的路由信息寫入第二路由表中,否則丟棄生成的路由信息。
在agent2上建立了到agent1的路由信息(QM2、RQ1->agent1)以及在agent1上建立了到agent2的路由信息(QM1、RQ2->agent2)后,后續(xù)APP2在需要通過agent2向agent1發(fā)送消息時,APP2將消息發(fā)送給agent2,agent2通過查詢本地的第一路由表獲得到agent1的路由信息(QM2、RQ1->agent1),將消息發(fā)送到該路由信息所指示的QM2中的RQ1,該消息通過消息隊列(MQ)網(wǎng)絡被從RQ1發(fā)送到QL1,然后agent1從QL1讀取消息后發(fā)送給APP1。同樣的,后續(xù)APP1在需要通過agent1向agent2發(fā)送消息時,APP1將消息發(fā)送給agent1,agent1通過查詢本地的第二路由表獲得到agent2的路由信息(QM1、RQ2->agent2),將消息發(fā)送到該路由信息所指示的QM1中的RQ2,該消息通過消息隊列(MQ)網(wǎng)絡被從RQ2發(fā)送到QL2,然后agent2從QL2讀取消息后發(fā)送給APP2。
本實施例提供了應用程序代理與隊列管理器之間是一對一的關系時,應用程序代理之間的路由信息的建立過程,實現(xiàn)了通過應用程序代理自動構建基于消息隊列的路由信息。當路由信息建立好以后一個應用程序向另一應用程序發(fā)送消息時,應用程序代理只需知道另一應用程序關聯(lián)了哪個agent即可,通過agent的標識查詢路由表中該agent的標識對應的遠程隊列,然后將消息發(fā)送到該遠程隊列,該消息即可被消息隊列網(wǎng)絡傳送至另一應用程序代理。當一個應用程序本地定義的遠程隊列指向的agent發(fā)生變化時,對應的路由信息會根據(jù)變化后的agent發(fā)來的路由探測消息而自動更新,而消息隊列網(wǎng)絡和應用程序代理的搭建過程全部交由系統(tǒng)管理員操作,從而可以使開發(fā)人員無需再關注隊列變化更專注于業(yè)務的開發(fā)工作。
第三實施例
圖4示出了本發(fā)明第三實施例提供的基于消息隊列的路由建立方法的流程示意圖。本實施例與實施例二的不同之處在于,本實施例中的應用程序代理與隊列管理器之間是一對多的關系,也即應用程序代理與多個隊列管理器相連接,本實施例以應用程序代理與兩個隊列管理器相連接為例進行說明。其中,第一應用程序(APP1)與第一應用程序代理(agent1)相關聯(lián),agent1與隊列管理器1(QM1)和隊列管理器3(QM3)相連接,QM1中設置有遠程隊列2(RQ2)和本地隊列1(QL1),QM3中設置有遠程隊列4(RQ4)和本地隊列3(QL3);第二應用程序(APP2)與第二應用程序代理(agent2)相關聯(lián),agent2與隊列管理器(QM2)和隊列管理器4(QM4)相連接,QM2中設置有遠程隊列1(RQ1)和本地隊列2(QL2),QM4中設置有遠程隊列3(RQ3)和本地隊列4(QL4)。
本實施例中,agent1與agent2之間通過QM1和QM2建立路由信息,其建立方法可以參見實施例二中步驟31-步驟36的描述,這里不再贅述。
本實施例中,agent1與agent2之間還通過QM3和QM4建立路由信息,參見圖4,其建立方法包括如下步驟:
步驟41:agent1在啟動后向RQ4發(fā)送路由探測消息,該路由探測消息中包含agent1的標識、QM3的標識、QL3的標識以及RQ4的標識,即路由探測消息中包含如下一組信息(agent1,QM3,QL3,RQ4);
步驟42:在路由探測消息被發(fā)送至RQ4后,RQ4中的路由探測消息通過消息隊列網(wǎng)絡被發(fā)送到QL4;
步驟43:agent2在啟動后從QL4中讀取路由探測消息;
agent2解析讀取到的路由探測消息,得到信息組(agent1,QM3,QL3,RQ4),確定QM4中的與QM3和QL3對應的遠程隊列為RQ3;生成agent2到agent1的路由信息,該路由信息中包含QM4、RQ3與agent1的對應關系,即(QM4,RQ3->agent1);如果本地的第一路由表中沒有與生成的該路由信息完全相同的路由信息,則將生成的路由信息寫入第一路由表中,否則丟棄生成的路由信息。
步驟44:agent2向RQ3發(fā)送回復消息,該回復消息中包含agent2的標識和RQ4的標識,即回復消息中包含如下一組信息(agent2,RQ4);當然,回復消息中還可以包含QM4和QL4的標識信息。
步驟45:在回復消息被發(fā)送至RQ3后,RQ3中的回復消息通過消息隊列(MQ)網(wǎng)絡被發(fā)送到QL3。
步驟46:agent1從QL3中讀取回復消息;
agent1解析讀取到的回復消息,得到消息組(agent2,RQ4),生成agent1到agent2的路由信息,該路由信息中包含QM3、RQ4與agent2的對應關系,即(QM3,RQ4->agent2);如果本地的第二路由表中沒有與生成的該路由信息完全相同的路由信息,則將生成的路由信息寫入第二路由表中,否則丟棄生成的路由信息。
通過上述過程,在agent2上建立了到agent1的兩條路由信息(QM2、RQ1->agent1)和(QM4、RQ3->agent1),以及在agent1上建立了到agent2的兩條路由信息(QM1、RQ2->agent2)和(QM3、RQ4->agent2),后續(xù)APP2在需要通過agent2向agent1發(fā)送消息時,APP2將消息發(fā)送給agent2,agent2通過查詢本地的第一路由表獲得到agent1的兩條路由信息(QM2、RQ1->agent1)和(QM4、RQ3->agent1),按照預先設定的路由選擇機制選擇其中一條路由信息,將消息發(fā)送到選擇的路由信息所指示的RQ1或RQ3,該消息通過消息隊列網(wǎng)絡(MQ)被從RQ1或RQ3發(fā)送到QL1或QL3,然后agent1從QL1或QL3讀取消息后發(fā)送給APP1。同樣的,后續(xù)APP1在需要通過agent1向agent2發(fā)送消息時,APP1將消息發(fā)送給agent1,agent1通過查詢本地的第二路由表獲得到agent2的兩條路由信息(QM1、RQ2->agent2)和(QM3、RQ4->agent2),按照預先設定的路由選擇機制選擇其中一條路由信息,將消息發(fā)送到選擇的路由信息所指示的RQ2或RQ4,該消息通過消息隊列(MQ)網(wǎng)絡被從RQ2或RQ4發(fā)送到QL2或QL4,然后agent2從QL2或QL4讀取消息后發(fā)送給APP2。
可見,本發(fā)明實施例中第二應用程序代理生成的第一路由信息包含確定的遠程隊列的標識、確定的遠程隊列所在隊列管理器的標識和第一應用程序代理的標識;將第一路由信息寫入本地的第一路由表中后,在接收到需要發(fā)送給第一應用程序代理的消息時,在本地的第一路由表中查詢包含第一應用程序代理的標識的路由信息,若查詢得到一條路由信息,則將消息發(fā)送至查詢得到的路由信息所指示的隊列管理器中的遠程隊列;若查詢得到多條路由信息,則按照設定路由選擇機制從該多條路由信息中選擇一條路由信息,將消息發(fā)送至選擇的路由信息所指示的隊列管理器中的遠程隊列。
同樣的,第一應用程序代理生成的第二路由信息包含第一應用程序代理所連接隊列管理器中的遠程隊列的標識、第一應用程序代理所連接隊列管理器中的遠程隊列所在隊列管理器的標識和第二應用程序代理的標識;第一應用程序代理將第二路由信息寫入本地的第二路由表中后,在接收到需要發(fā)送給第二應用程序代理的消息時,在本地的第二路由表中查詢包含第二應用程序代理的標識的路由信息,若查詢得到一條路由信息,則將消息發(fā)送至查詢得到的路由信息所指示的隊列管理器中的遠程隊列;若查詢得到多條路由信息,則按照設定路由選擇機制從該多條路由信息中選擇一條路由信息,將消息發(fā)送至選擇的路由信息所指示的隊列管理器中的遠程隊列。
其中的路由選擇機制可以包括但不限于以下兩種:
第一,根據(jù)對應的應用程序的指示選擇路由信息,比如第一應用程序代理根據(jù)第一應用程序的指示選擇路由信息,第二應用程序代理根據(jù)第二應用程序的指示選擇路由信息;
第二,應用程序代理在使用每條路由信息進行消息的發(fā)送時,記錄從發(fā)送消息到接收到該消息的回復消息的時間間隔,并且應用程序代理會記錄每條路由信息的當前狀態(tài)是否被占用,下表1給出了agent2在使用路由信息(QM4、RQ3->agent1)進行消息的發(fā)送時,記錄的內容的一個示例。當存在兩個應用程序代理之間的多條路由信息時,根據(jù)記錄的多條路由信息分別對應的時間間隔以及是否被占用的信息,來從多條路由信息中選擇一條路由信息,比如選擇未被占用的、且時間間隔最小的路由信息來進行消息的發(fā)送。
表1
本實施例提供了應用程序代理與隊列管理器之間是一對多的關系時,應用程序代理之間的路由信息的建立過程,實現(xiàn)了通過應用程序代理自動構建基于消息隊列的路由信息。當路由信息建立好以后一個應用程序向另一應用程序發(fā)送消息時,應用程序代理只需知道另一應用程序關聯(lián)了哪個agent即可,通過agent的標識查詢路由表中該agent的標識對應的遠程隊列,當查詢到多個遠程隊列時,根據(jù)一定的路由選擇機制選擇一個遠程隊列,然后將消息發(fā)送到該遠程隊列,該消息即可被消息隊列網(wǎng)絡傳送至另一應用程序代理。當一個應用程序本地定義的遠程隊列指向的agent發(fā)生變化時,對應的路由信息會根據(jù)變化后的agent發(fā)來的路由探測消息而自動更新,而消息隊列網(wǎng)絡和代理的搭建過程全部交由系統(tǒng)管理員操作,從而可以使開發(fā)人員無需再關注隊列變化更專注于業(yè)務的開發(fā)工作。
第四實施例
圖5示出了本發(fā)明第四實施例提供的基于消息隊列的路由建立系統(tǒng)的網(wǎng)絡圖。參見圖5,該基于消息隊列的路由建立系統(tǒng)包括:第一應用程序代理51、第二應用程序代理52、第一應用程序代理所連接的隊列管理器即第一隊列管理器53和第二應用程序代理所連接的隊列管理器即第二隊列管理器54,其中:
第一應用程序代理51,用于將路由探測消息發(fā)送至第一應用程序代理51所連接隊列管理器53中的遠程隊列;
第二應用程序代理52,用于從第二應用程序代理52所連接隊列管理器54中的本地隊列接收到所述路由探測消息后,解析該路由探測消息,根據(jù)解析結果確定并生成到第一應用程序代理51的第一路由信息,并根據(jù)該第一路由信息將回復消息發(fā)送至第二應用程序代理52所連接隊列管理器54中的遠程隊列;
其中,所述第一應用程序代理51從所述第一應用程序代理51所連接隊列管理器53中的本地隊列讀取到所述回復消息后,解析該回復消息,根據(jù)解析結果生成到所述第二應用程序代理52的第二路由信息。
進一步的,所述路由探測消息中包含所述第一應用程序代理51的標識、所述第一應用程序代理51所連接隊列管理器53的標識、所述第一應用程序代理51所連接隊列管理器53中的本地隊列的標識、所述第一應用程序代理51所連接隊列管理器53中的遠程隊列的標識;
相應的,所述第二應用程序代理52根據(jù)解析結果確定并生成到第一應用程序代理51的第一路由信息,并根據(jù)該第一路由信息向第二應用程序代理52所連接隊列管理器54中的遠程隊列發(fā)送回復消息的具體方法為:
根據(jù)所述路由探測消息的解析結果確定所述第二應用程序代理52所連接隊列管理器54中的、與所述第一應用程序代理51所連接隊列管理器53和所述第一應用程序代理51所連接隊列管理器53中的本地隊列所對應的遠程隊列,根據(jù)確定的遠程隊列生成所述第二應用程序代理到第一應用程序代理51的第一路由信息,并向確定的遠程隊列發(fā)送回復消息。
進一步的,所述回復消息中包含第二應用程序代理52的標識和所述第一應用程序代理51所連接隊列管理器53中的遠程隊列的標識;
相應的,所述第一應用程序代理51根據(jù)解析結果生成到第二應用程序代理52的第二路由信息的具體方法如下:
根據(jù)解析所述回復消息得到的所述第一應用程序代理51所連接隊列管理器53中的遠程隊列的標識和所述第二應用程序代理52的標識生成所述第一應用程序代理51到所述第二應用程序代理52的所述第二路由信息。
進一步的,所述第二應用程序代理52與一個或多個隊列管理器連接,所述第一路由信息包含所述確定的遠程隊列的標識、所述確定的遠程隊列所在隊列管理器的標識和所述第一應用程序代理51的標識;
所述第二應用程序代理52還用于:在生成第一路由信息之后,將所述第一路由信息寫入本地的第一路由表中;在接收到需要發(fā)送給第一應用程序代理51的消息時,在本地的第一路由表中查詢包含所述第一應用程序代理的標識的路由信息,若查詢得到一條路由信息,則將所述消息發(fā)送至查詢得到的路由信息所指示的隊列管理器中的遠程隊列;若查詢得到多條路由信息,則按照設定路由選擇機制從該多條路由信息中選擇一條路由信息,將所述消息發(fā)送至選擇的路由信息所指示的隊列管理器中的遠程隊列。
進一步的,所述第一應用程序代理51與一個或多個隊列管理器連接,所述第二路由信息包含所述第一應用程序代理所連接隊列管理器53中的遠程隊列的標識、所述第一應用程序代理所連接隊列管理器53中的遠程隊列所在隊列管理器的標識和所述第二應用程序代理52的標識;
所述第一應用程序代理51還用于:在生成第二路由信息之后,將所述第二路由信息寫入本地的第二路由表中;在接收到需要發(fā)送給第二應用程序代理52的消息時,在本地的第二路由表中查詢包含所述第二應用程序代理的標識的路由信息,若查詢得到一條路由信息,則將所述消息發(fā)送至查詢得到的路由信息所指示的隊列管理器中的遠程隊列;若查詢得到多條路由信息,則按照設定路由選擇機制從該多條路由信息中選擇一條路由信息,將所述消息發(fā)送至選擇的路由信息所指示的隊列管理器中的遠程隊列。
本實施例中的應用程序代理和其所連接的隊列管理器可以設置在同一終端或服務器上,也可以設置在不同終端或服務器上。
本發(fā)明利用消息隊列的回復機制進行了路由信息的自動建立,同時對應用程序屏蔽了隊列的細節(jié),使得基于消息隊列的應用開發(fā)變得更加容易,應用程序不再需要關注隊列的信息,只需要關聯(lián)本地的應用程序代理,應用程序代理可將消息發(fā)送到對端應用程序代理,此方案也使得應用程序無需關注底層消息隊列網(wǎng)絡的修改。
以上所述僅為本發(fā)明的優(yōu)選實施例,并不用于限制本發(fā)明,對于本領域技術人員而言,本發(fā)明可以有各種改動和變化。凡在本發(fā)明的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。