大部分Web应用都需要和其他系统做数据交互,即,通过sql在数据库中查询结果,然后将结果反抗给其他系统,比如,电信系统中的CRM(客户关系)系统,服务开通系统,资源系统,CRM系统通过调用资源系统查询可用的码号资源(固网电话号码,移动电话号码,ETS号码,800\400号码等),然后向服务开通系统发送流程请求,服务开通系统收到CRM系统请求之后,向资源系统发起资源配置请求,资源系统则在内部为服务开通系统完成资源配置请求之后,向服务开通系统发出资源配置回单请求(即资源系统的详细配置结果),然后服务开通系统系统根据资源系统的回单结果通知程控激活网络交换机端口,完成一个典型的电信业务开通。
一个最简单的电信系统一般包括三个子系统 CRM客户关系管理系统,IOM服务开通管理系统,RES资源管理系统,这三个系统可以是一个大系统的三个模块,也可以由独立地,但是密不可分的三个系统组成,一般来说,选择后者可以使得系统的可维护性、更高,冗余度更低,对电信运营商来说,也可以减少对单一软件厂商的依赖。可是,将一个系统拆分成三个系统,那么这些关联度如此高的系统,该如何通信呢?
如何通信?
“三个独立而密不可分的系统”是一个理想的设计方案,一般来说,不同系统之间交互数据的方式一般有三种
1 DBLINK方式 ,这是一张比较普遍的方式,Oracle是比较主流的数据库方案,支持在不同数据库之间建立DBLINK来交互数据,操作也非常方便,但是DBLINk方式对表本身的依赖较大,系统之间建立众多的DBLINK,也会造成管理混乱,某些运营商已经明确要求软件提供商的相应产品不得使用DBLINK来交互数据。
2 基本HTTP协议,这也是一直较为常见的数据交互方式,使用方法较为灵活,一个很简单的Servlet就可以完成这个功能,但是这种方案的案例并不多见。
3 WebService方式,这是最常见的一直数据交互方式,目前大部分电信IT系统之间都在采用这种方式来交互数据,相比较于前两种方式这种方式最大的优势是可以有众多的支持厂商,使用方式,你几乎可以任何系统做数据交互,作为第一个案例,我们首先看一下资源系统如何处理第一个资源配置请求。
资源系统如何接受请求?
资源系统的主要作用是对电信系统的各种物理、逻辑资源进行管理,现在,国内三家运营商都支持移动电话业务我们已一个C网业务在电信系统的开通流程进行说明
可以来到电信系统营业厅,办理C网业务,第一件事是在CRM的页面中选择一个自己喜欢的电话号码,这一步需要CRM系统和RES系统完成一个号码选择接口 请求的报文可以是这样的:
<?xml version="1.0" encoding="utf-8"?>
<root>
<head>
<requestId>20121314</requestId>
<requestCode>qryResCodeNo</requestCode>
</head>
<body>
<parments>
<parment id="10000004" name="CodeLevel">
1
</parment>
<parment id="10000005" name="count">
20
</parment>
</parments>
</body>
</root>
请求报文包括两部分,Head和body部分,分别约定报文的头文件和详细信息,requestId标示本次请求的编号,requestCode约定本次请求的接口编码是哪个,服务 提供方根据这个鬓毛确定由哪一个逻辑来处理这个请求。报文的body部分则包含详细的参数形象,其中的name属性告诉是该属性的名称,id属性唯一的标示参数类型。
这个请求报文中,已经包含了一个最简单的号码查询接口请求报文中需要的所有信息,在号码请求报文中,已经包含了本次请求的序列(<requestId>20121314</requestId>) 本次请求的接口编码(<requestCode>qryResCodeNo</requestCode>)这些信息作为一个头信息,还有一个Body部分包含完整的查询条件:
(<parment id="10000004" name="CodeLevel">)这一部分约定了请求的号码等级,我们这里假定是一级号码
(<parment id="10000005" name="count">) 这一部分约定了请求的号码数量,如果资源系统有足够的未被使用(空闲)的号码,那么会返回给CRM系统相关的号码。
当资源系统接收到这个请求之后,首先解析的是号码的请求编码(qryResCodeNo)找到对应的业务逻辑,并执行之,将执行结果反馈给CRM系统,反馈的报文可以是这样的:
<?xml version="1.0" encoding="utf-8"?>
<root>
<head>
<requestId>20121314</requestId>
<requestCode>qryResCodeNo</requestCode>
</head>
<body>
<result>
<resultCode>0</resultCode>
<resultMarkes>查询成功</resultMarkes>
<count>5</count>
<resultitem>
13888888881
</resultitem>
<resultitem>
13888888882
</resultitem>
<resultitem>
13888888883
</resultitem>
<resultitem>
13888888884
</resultitem>
<resultitem>
13888888885
</resultitem>
</result>
</body>
</root>
CRM将这个结果呈现到前端,供用户选择,选择之后,CRM系统向资源系统发起一个号码预占请求,资源系统将这个号码预占,防止该号码再被其他客户选到,当CRM完成客户业务受理之后,向服务开通提交资源流程请求,服务开通收到这个请求之后,向资源系统提交资源配置请求,这部分内容下篇文章讨论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。