基于接收表的ESB研究與設(shè)計(jì)
ESB(Enterprise Service Bus,企業(yè)服務(wù)總線),提供了消息交互的基礎(chǔ)結(jié)構(gòu),使得消息可以傳輸?shù)綄?duì)應(yīng)的服務(wù)中去。目前大多數(shù)的ESB系統(tǒng)都是采用基于內(nèi)容的路由算法,即根據(jù)消息的內(nèi)容把消息路由到正確的服務(wù)單元。當(dāng)有較多服務(wù)單元接收消息時(shí),此種算法的工作效率將大幅下降,ESB也會(huì)承擔(dān)較大的負(fù)載,使得整個(gè)系統(tǒng)集成的效率降低。常規(guī)的解決方案是把判斷服務(wù)單元是否應(yīng)該接收消息的邏輯分布到各個(gè)服務(wù)單元上,但此方法增加了維護(hù)的負(fù)擔(dān)。為了保持集中控制,可以在每條消息附帶的列表中指定這個(gè)消息所面向的接收者。這樣,當(dāng)消息被廣播給所有可能的接收者時(shí),不在接收者列表中的各個(gè)接收者可以丟掉該消息。
但采用這種方法的缺點(diǎn)是效率低,每個(gè)潛在的接收者必須處理每一條消息。并且,如果要求消息不希望被某些接收者看到,采用這種解決方案是不適合的。例如在發(fā)送某些機(jī)密消息時(shí),是不希望無關(guān)接收者收到消息的。
為了解決上述問題,文中提出了基于接收表的ESB路由算法,可以提高消息交互的效率和消息的保密性。
1 接收表路由算法的分析與設(shè)計(jì)
在基于接收表的路由算法中,應(yīng)為每個(gè)接收者定義一個(gè)通道,可以定義一個(gè)規(guī)則庫(kù)來檢驗(yàn)輸入的消息,確定需要該消息的接受者列表,并把消息轉(zhuǎn)發(fā)給與列表中接收者關(guān)聯(lián)的所有通道。
1.1 路由設(shè)計(jì)
在接收表的算法中,接收表路由器主要由接收者計(jì)算邏輯和消息分配器兩個(gè)部分組成,消息的傳遞過程,如圖1所示。
接收者計(jì)算邏輯首先對(duì)消息進(jìn)行處理,確定此消息應(yīng)該發(fā)送到哪些服務(wù)中去,計(jì)算出接收者列表,進(jìn)而分配器將消息轉(zhuǎn)發(fā)到服務(wù)所對(duì)應(yīng)的通道中去,最后服務(wù)接收到此消息。在接收者計(jì)算邏輯中,要對(duì)消息的內(nèi)容進(jìn)行分析,并且要結(jié)合服務(wù)接收消息的規(guī)則來計(jì)算接收者的列表。
接收者計(jì)算邏輯應(yīng)將服務(wù)者與其服務(wù)地址及服務(wù)規(guī)則進(jìn)行關(guān)聯(lián),可以進(jìn)行如下表示。
Routing:=ser_id,ser_name,uri,{ser_rule}>
(1)ser_id表示服務(wù)單元的編號(hào);
(2)ser_name表示服務(wù)的名稱;
(3)uri表示服務(wù)的地址;
(4){ser_rule}表示該服務(wù)單元的規(guī)則集。
ser_rule應(yīng)將規(guī)則的名稱和該規(guī)則要求的值進(jìn)行關(guān)聯(lián),可以進(jìn)行如下表示:
ser_rule:=rule_name,value>
(1)rule_name表示規(guī)則的名稱;
(2)value表示規(guī)則的對(duì)應(yīng)值。
接收者計(jì)算邏輯映射為xml文件的形式,并且將服務(wù)的地址和服務(wù)單元要求的規(guī)則進(jìn)行了描述。
評(píng)論