服务总线(ESB)

  1. 1.功能描述

  2. 2.准备工作

  3. 3.服务注册

1)新建企业服务总线管理器

2)服务注册

  1. 4.去中心模式使用服务

1)直接调用服务的函数

2)服务数据装配成BC,完成服务数据对象(SDO)组装

选择virtualtable形成一个BC

选择服务总线上的函数装配成BC列和读取函数

在全局引用库引用WSProxy.dll

生成服务对象BC源码编译

根据BC建立列表VC,再装配成BPO

服务对象BC如何接收前端查询条件

  1. 5.ESB中心模式使用服务

1)ESB服务程序启动

2)UCML_ESB服务的发布地址



1.    功能描述

UCML之上ESB是一个轻量级的服务总线,它的内容包括服务注册、服务元数据管理、消息路由、ESB代理调用、本地直接调用、性能监控、日志插件、消息中间件、服务数据消费组件(BC)等功能通过UCML企业服务总线UCML-ESB,完成底层业务服务整合,可以使企业内部多个系统之间交互需要的业务逻辑、数据等都是以服务的形式完成, UCML-ESB同时提供ESB代理调用服务机制和去中心(ESB)调用两种模式,来满足现在流行的去中心分布式服务模式

UCML-ESB服务总线

 

下面内容将介绍如何利用UCML如何注册服务、调用服务、如何把服务数据装配成BC数据、完成增删改查的过程

 

2.    准备工作

         按照【UCML开发访问数据的WCF服务过程章节准备一个wcf服务程序,并确保启动

 

3.    服务注册

服务注册过程在UCML开发平台IDE之上完成,目前UCML支持服务包括webservicewcf和本地类库,服务注册过程包括服务地址uri输入、服务类型、负载平衡模式和代理类库等内容的填写。服务注册完之后要发布到运行环境中,才可以生效。下面就以前面章节开发出的读取人员数据服务http://localhost:8818/UCMLCommon.UCML_CONTACT?WSDL为例,讲解在UCML如何注册服务和试用服务做成增删改查的例子

 

1)   新建企业服务总线管理器

UCML左侧对象上项目包类的根节点上点击右键菜单,选择【企业服务总线管理器】菜单项,就可以建立注册服务总线用的目录,如下图:

 

2)   服务注册

如上图所示,在【企业服务总线管理器】上点击出右键菜单,选中【添加服务注册】菜单项,添加一个新的服务注册,服务注册内容填写可按下面步骤完成

填写服务地址

首先要填写服务地址:http://localhost:8818/UCMLCommon.UCML_CONTACT?WSDL要确保服务宿主程序启动,服务是否启动成功可以点击【服务测试】按钮进行测试。

引入服务元数据模型

UCML可以引入服务元模型数据,同时形成函数列表和输入输出参数列表,这样后期UCML平台在使用服务函数时可以方便的做对传值映射。

点击【执行引入】按钮,可以获取元模型数据,就自动填充函数列表、参数列表,同时也填【服务名称】、【代理类名称】等录入项,如图:

 

生成服务代理文件并编译成Dll文件

为了方便可以调用服务,UCML通常要把服务接口生成代理类,并编译成Dll,注册项的【部署名称】,就是必须要填写这个Dll文件名称(不包含Dll后缀),生成代理文件的过程可以在UCML解决方案下:

·   添加【.Net源码类项目】

·   添加一个【服务引用代理类】

·   在这类的里面添上【服务地址】http://localhost:8818/UCMLCommon.UCML_CONTACT?WSDL

再点击【生成代理文件按钮】:由于编码问题,可以手动清除头部标题乱码

·   在源码生成和编译这个工程,就可以得到这个Dll文件。

如下图描述操作过程

·   添加【.Net源码类项目】

 

·   添加一个【服务引用代理类】

·   在源码生成和编译这个工程,就可以得到这个WSProxy.Dll文件。

 

 

在服务注册里填写代理类部署dll名称

把代理类名称WSProxy填入录入项【部署名称】

发布服务注册

在【企业服务总线管理器】上点击出右键菜单,执行【服务注册信息导出】菜单项

至此一个完整服务已被发布服务总线上,下面将介绍如何使用注册好的服务

 

4.    去中心模式使用服务

去中心模式调用,就是不通过ESB总线服务远程代理调用,而是由UCML底层创建服务调用示例,本地程序直接调用远程服务,好处是服务既到了统一管理,又可以高效调用。

一个注册好的服务,在UCML里可以有3种用法,一是当作普通函数调用,是可以装配在BC上使用,三是可以装配在BC列上使用,也是BC上的个别列可以直接读写服务总线函数

1)   直接调用服务的函数

我们演示在一个表单中,添加一个业务动作函数,这个函数接收WebGRID的当前行主键和人员姓名,通过调用服务中的Load函数,并返回人员姓名到客户端,这个过程分为:

添加一个动作函数

定义这个函数的参数是key,代表当前人员的主键,通过点击下拉按钮【自动节点功能装配】的下拉菜单项【ESB服务编排】,弹出对话框,选取UCML.Service.UCML_CONTACT服务,和选择Load函数,

完整函数代码如下:

        public string TestBusMethod(string key, string PersonName)

        {

            UCMLCommon.Auth auth = new UCMLCommon.Auth();

            UCML.Service.UCML_CONTACTClient objService = (UCML.Service.UCML_CONTACTClient)UCMLCommon.ESB.Service.CreateESBService(auth, "UCML.Service.UCML_CONTACT");

            UCML.Service.UCML_CONTACTInfo info = new UCML.Service.UCML_CONTACTInfo();

            info.UCML_CONTACTOID = new Guid(key);

            Int32 result = objService.Load(ref info);

            objService = (UCML.Service.UCML_CONTACTClient)UCMLCommon.ESB.Service.CreateESBService(auth, "UCML.Service.UCML_CONTACT");

            info.PersonName = PersonName;

            objService.Update(info);

            return info.PersonName;

        }

其中UCMLCommon.ESB.Service.CreateESBService(auth, "UCML.Service.UCML_CONTACT")用来根据服务ID:"UCML.Service.UCML_CONTACT",来创建客户端服务实例,就可以本地类一样使用服务接口函数了。

 

2)   服务数据装配成BC,完成服务数据对象(SDO)组装

接下介绍一个非常重要的功能,就是如何把服务函数提供的数据自动化装配成BC不但能够完成翻页功能,还以接收前端的查询条件。操作步骤分为建立一个来源于虚表【virtualtable】的BC

然后通过选择函数返回的结构自动映射成BC 的列,同时也自动装配ReadData函数的实现,具体操作如下:

选择virtualtable形成一个BC

选择服务总线上的函数装配成BC列和读取函数

 

通过上图操作,产生下图结果:

在全局引用库引用WSProxy.dll

生成服务对象BC源码编译

根据BC建立列表VC,再装配成BPO

装配的ReadData代码可以自动完成翻页功能

服务对象BC如何接收前端查询条件

服务BC 也可以接收来自查询组件和查询列表的查询条件,通过解析ReadData的参数defaultSQLCondistring defaultFieldList,string defaultValueList,string defaultCondiIndentList,

可以获取查询VCGRID查询漏斗传过来的参数名称和参数值,再传给服务函数,就可以完成服务函数的条件查询功能了。

 

5.    ESB中心模式使用服务

 

ESB中心模式就是指用UCML_ESB.EXE服务程序,代理调用服务,然后UCML_ESB服务程序返回结果给客户端。UCML支持部署多个UCML_ESB服务程序,完成集群部署、负载平衡功能,解决单点部署压力集中的问题,由于由UCML_ESB统一调用服务,所以对服务效率和日志都有统一管理方案。下面从如何配置和启动UCML_ESB、客户端如何调用服务等几方面介绍中心模式的ESB使用。

 

1)   ESB服务程序启动

UCML服务总线的程序名是UCML_ESB.EXE缺省是在BPObject\bin目录下,也可以放在流程引擎bin下,都可以运行起来,可以安装成windows服务或者用命令行启动,命令行启动模式为:

 

UCML_ESB.EXEt 0

 

2)   UCML_ESB服务的发布地址

UCML_ESB服务程序可以多地址发布,用来完成UCML_ESB的集群部署

修改UCML_ESB服务器发布地址所在目录下的UCMLCONF.XML文件,添加服务器地址配置节点,如下:

<UCML_ESBSERVER_URL>

<uri>http://localhost:8808/UCMLCommon.ESB.ESBService</uri>

<weight>80</weight>

</UCML_ESBSERVER_URL>

<UCML_ESBSERVER_URL>

<uri>http://localhost:8809/UCMLCommon.ESB.ESBService</uri>

<weight>80</weight>

</UCML_ESBSERVER_URL>

 

缺省地址为:http://localhost:8808/UCMLCommon.ESB.ESBService

 

客户端调用服务函数原型为:

public static object InvokeDRWCF(Auth auth, string ServiceName, string MethodName, string binding, params object[] args) 函数调用UCML_ESB总线中配置的服务。该服务共五个参数:

Auth:权限认证信息。

ServiceName:服务名称

MethodName:请求服务函数名称

Binding:绑定通信协议方式

Args:所需请求服务函数参数

调用示例

            UCMLCommon.Auth auth = new UCMLCommon.Auth();

            UCMLCommon.ESB.Service.InvokeDRWCF(auth, "UCML.Service.HTServiceClient", "FinishContract", "nettcpbinding",new object[] { new Guid(param.TestContractKey)} );

另外UCML_ESB对外成了Webservice接口http://localhost:8808/UCMLCommon.ESB.ESBServiceWSDL

 

    public interface IESBService

    {

        [OperationContract]

        RequestData Invoke(Auth auth, string ServiceName, string MethodName, RequestData[] args); 

}

 

通过Webservice也可以直接调用上述接口

 

 

 


评论

暂无评论!

发表评论