在上述xml形式的接收者计算逻辑中,以服务单元B为例对规则库进行说明。“<rule name=”region”value=”Beijing”></rule>”定义了服务地域的规则,即只服务北京的客户,“<rule name=”client”value=”enterprise”></rule>”定义了服务客户类型的规则,即只服务于企业,“<rulename=”maxloanamout”value=”5 000”></rule>”定义了服务项贷款的最大金额,其值为5 000万元。
获取接收者列表的算法,可以进行如下描述:S为服务单元的集合,Si为的某个服务单元。ri为服务单元i的规则集,rij为服务单元i的某条规则,servicerList为接受者列表,在初始化时加载所有的服务单元(1≤i≤n,1≤j≤m,n为节点的个数,m为某个服务节点的规则的个数)。
//如果不能满足此服务单元的路由规则,则接收者列表中删除此服务单元。
1.2 动态化
为了使服务能够动态的调整自己的服务对象,提高整个系统集成的灵活性。将路由规则分布到各个服务来控制,是一种理想的解决方案。通过接收表的动态化,整个系统的实时性也有进一步的提高。例如,服务单元N以前只能处理贷款金额<1 000万元的服务请求,而服务单元N进行系统升级后,可以处理贷款金额<1亿元的服务请求,此时应该对接收表中规则库做相应的调整。为了实现这种功能,应在服务节点和接收表之间建立控制信息传输通道,使得服务节点能把自己处理消息的要求发送给接收表,并存储到其规则库中,其流程如图2所示。
接口程序是由ESB路由器提供,服务单元只需调用ESB的(修改xml路由文件)服务接口,实现对接收表计算逻辑的修改。
接口设计:
class ServiceOperation
{
CreateServicer(Servicel s);//创建服务
UpdateServicer(Serricer s);//更新服务包括服务名,路径的修改
RemoveServicer(String ServicerID);//根据服务的ID删除对应服务在路由器中的信息
CreateServicerRule(String ServicerID,StringruleName,String rule Value);
//根据服务的ID,创建该服务新的规则
UpdateServicerRule(String ServicerID,StringruleName,String ruleValue);
//根据服务的ID和规则的名称,更新规则的值
RemoveServicerRule(String ServicerID,StringruleName);
//根据服务的ID和规则的名称,删除该规则
}
此接口应以Web服务的方式暴露给与ESB集成的服务单元,使其可以调用接口中的方法来实时改变服务单元的服务。