基于接收表的ESB研究與設(shè)計(jì)
在上述xml形式的接收者計(jì)算邏輯中,以服務(wù)單元B為例對規(guī)則庫進(jìn)行說明?!皉ule name=”region”value=”Beijing”>/rule>”定義了服務(wù)地域的規(guī)則,即只服務(wù)北京的客戶,“rule name=”client”value=”enterprise”>/rule>”定義了服務(wù)客戶類型的規(guī)則,即只服務(wù)于企業(yè),“rulename=”maxloanamout”value=”5 000”>/rule>”定義了服務(wù)項(xiàng)貸款的最大金額,其值為5 000萬元。
獲取接收者列表的算法,可以進(jìn)行如下描述:S為服務(wù)單元的集合,Si為的某個(gè)服務(wù)單元。ri為服務(wù)單元i的規(guī)則集,rij為服務(wù)單元i的某條規(guī)則,servicerList為接受者列表,在初始化時(shí)加載所有的服務(wù)單元(1≤i≤n,1≤j≤m,n為節(jié)點(diǎn)的個(gè)數(shù),m為某個(gè)服務(wù)節(jié)點(diǎn)的規(guī)則的個(gè)數(shù))。
//如果不能滿足此服務(wù)單元的路由規(guī)則,則接收者列表中刪除此服務(wù)單元。
1.2 動(dòng)態(tài)化
為了使服務(wù)能夠動(dòng)態(tài)的調(diào)整自己的服務(wù)對象,提高整個(gè)系統(tǒng)集成的靈活性。將路由規(guī)則分布到各個(gè)服務(wù)來控制,是一種理想的解決方案。通過接收表的動(dòng)態(tài)化,整個(gè)系統(tǒng)的實(shí)時(shí)性也有進(jìn)一步的提高。例如,服務(wù)單元N以前只能處理貸款金額1 000萬元的服務(wù)請求,而服務(wù)單元N進(jìn)行系統(tǒng)升級后,可以處理貸款金額1億元的服務(wù)請求,此時(shí)應(yīng)該對接收表中規(guī)則庫做相應(yīng)的調(diào)整。為了實(shí)現(xiàn)這種功能,應(yīng)在服務(wù)節(jié)點(diǎn)和接收表之間建立控制信息傳輸通道,使得服務(wù)節(jié)點(diǎn)能把自己處理消息的要求發(fā)送給接收表,并存儲到其規(guī)則庫中,其流程如圖2所示。
接口程序是由ESB路由器提供,服務(wù)單元只需調(diào)用ESB的(修改xml路由文件)服務(wù)接口,實(shí)現(xiàn)對接收表計(jì)算邏輯的修改。
接口設(shè)計(jì):
class ServiceOperation
{
CreateServicer(Servicel s);//創(chuàng)建服務(wù)
UpdateServicer(Serricer s);//更新服務(wù)包括服務(wù)名,路徑的修改
RemoveServicer(String ServicerID);//根據(jù)服務(wù)的ID刪除對應(yīng)服務(wù)在路由器中的信息
CreateServicerRule(String ServicerID,StringruleName,String rule Value);
//根據(jù)服務(wù)的ID,創(chuàng)建該服務(wù)新的規(guī)則
UpdateServicerRule(String ServicerID,StringruleName,String ruleValue);
//根據(jù)服務(wù)的ID和規(guī)則的名稱,更新規(guī)則的值
RemoveServicerRule(String ServicerID,StringruleName);
//根據(jù)服務(wù)的ID和規(guī)則的名稱,刪除該規(guī)則
}
此接口應(yīng)以Web服務(wù)的方式暴露給與ESB集成的服務(wù)單元,使其可以調(diào)用接口中的方法來實(shí)時(shí)改變服務(wù)單元的服務(wù)。
評論