ESB平台项目详细设计说明书_第1页
ESB平台项目详细设计说明书_第2页
ESB平台项目详细设计说明书_第3页
ESB平台项目详细设计说明书_第4页
ESB平台项目详细设计说明书_第5页
已阅读5页,还剩24页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

兰州ESB平台项目TITLE详细设计说明书版本号:1.0

文档信息版本号日期说明作者目录1 引言 21.1 编写目的 21.2 范围 21.3 术语定义、符号和缩略语 22 ESB平台项目 32.1 ESB平台总体架构 32.2 ESB平台功能架构 42.2.1 ESB平台功能架构图 42.2.2 ESB平台功能模块设计 42.3 ESB平台与外接系统关系 62.4 数据结构设计 82.4.1 数据库ER图 82.4.2 数据库详细说明 82.5 ESB平台设计 82.5.1 开发框架 82.5.2 消息流程设计 102.5.3 报文规范及接口设计 212.6 开发说明 242.6.1 项目阶段安排 242.6.2 开发环境 242.6.3 命名规范 252.6.4 版本管理 252.7 部署说明 262.8 应用场景设计 262.8.1 天气查询服务场景(交互) 262.8.2 天气信息推送与接收场景(下发) 262.8.3 天气信息上报与数据采集场景(上报) 26引言编写目的依据SOA指导思想,编写本兰州ESB平台项目详细设计说明书,为客户提供一个可参考的规划依据。范围本平台应用兰州ESB平台项目的功能后台以及场景模拟。术语定义、符号和缩略语术语定义解释ESB平台如不特别指明,数据整合平台是指包括ESB,总线管理平台在内的IT系统。子系统连接ESB系统参与系统集成和业务数据交换的业务系统。ESB平台项目ESB平台总体架构ESB平台实现各接入业务系统之间的数据传递和服务调用,其总体架构如下图: 如图黄色背景部分,主要包含两大模块:主处理模块实现服务的暴露,后台系统的集成;针对输入的服务消息进行解析,检索,权限校验;读取路由关系并进行传输,实现基于消息内容的路由;记录服务运行日志,记录处理异常日志。接口模块解析消息,识别服务类型;根据服务实体数据库接口读取或存储数据;根据服务提供方提供的WEBSERVICE等消息接口调用服务;按照服务格式规范组装消息。ESB平台功能架构ESB平台功能架构图ESB平台功能模块设计权限校验每个服务都应有且仅有一个服务提供方提供服务,如果出现同个服务有两个或多个系统提供,那就需将服务分版本管理,采用不同的服务名;服务的权限校验是针对主动发送类服务而言的(如静态数据服务),静态类数据服务提供方对外发送数据到了数据整合平台需校验该系统是否有权限发起该服务;校验通过则进入路由服务,检验失败则要返回给服务发起方一个反馈信息让服务发起方知晓。路由功能路由缓存为了提高效率,系统初始化时,从数据库的路由关系表中读取路由关系,通过定义缓存接口,将其路由关系表信息写入缓存。路由刷新当路由关系表信息发生变更时,手动发送路由关系修改通知到修改缓存的消息队列之中,通过IBMMQ获得路由变更消息后,重新读取路由关系表,刷新路由缓存。服务路由服务路由是数据整合平台基于内容路由的核心功能,数据整合平台接收到服务发起方的通过权限校验的服务请求后进行路由匹配,匹配成功后就开始处理该请求,并将服务响应结果传输给服务提供方系统。协议转换不同的业务系统可能会使用不同的协议传递消息,ESB平台提供不同的接口类型以适应不同的入口协议或者出口,协议的转换在ESB平台的内部封装完成,不需要在接入系统做相关修改。该平台支持的协议包括WEBSERVICE和JMS。消息处理消息解析系统提供对于XML格式消息的解析功能,针对消息数据的Head、Body等进行解析。消息封装接收到消息数据后,会自动将其转换、组装成符合ESB平台数据规范的数据,消息格式如:<MSG><HEADER><SERVICENAME>EB_DYHY</SERVICENAME><SENDER>DSPT</SENDER></HEADER><BODY><book>hao</book></BODY></MSG>内容处理报文处理支持对消息进行统一的业务处理,可以对特定内容字段进行简单的运算。日志记录当平台发生日志事件时,平台将发送通知到MQ日志流,该日志流以MQ队列为入口,读取日志消息,根据日志消息类型的不同,本平台分别记入服务操作日志和异常服务日志。异常处理ESB平台在接收到服务请求之到服务结束期间发生一切异常都有完整处理。一方面要让服务请求方知道服务调用失败,即异常反馈;一方面数据整合平台需要知道异常情况,即记录异常日志。异常类型:数据整合平台主要可能发生的异常需要进行归类,便于辨别发生异常的问题出在哪,如消息解析异常,权限校验异常,路由检索异常,消息路由传输异常等等。异常反馈:数据整合平台出现任何异常导致消息传输失败都需要以消息的方式通知服务请求方,让请求方知道服务调用失败,以作下一步处理保证事物的完整性。记录异常:数据整合平台发生以上异常都需要调用日志记录功能记入日志,便于系统管理员跟踪排除问题。ESB平台与外接系统关系IT应用环境实际业务场景中,某些应用系统的业务数据会与其它系统间有交互、共享,同时,某些应用系统也会作为服务的提供方向外暴露服务,供其它消费方应用系统调用。根据不同业务系统互相之间有数据交互,异构环境等特点,ESB平台建设以SOA架构为指导,为有业务需要的应用系统提供了一个透明的、无差异的集成实现;该平台以ESB企业服务总线为技术实现,分解业务系统之间的互联关系,为参与服务的各应用系统间的服务及数据交互提供安全、高性能、可扩展的集成平台。根据现有掌握的业务情况,平台综合逻辑架构如下图:数据结构设计数据库ER图数据库详细说明参见《兰州ESB平台数据库设计.xlsx》ESB平台设计开发框架ESB平台,主要是负责参与服务交互的各业务系统之间的数据传递和消息转换。如各业务系统将数据上报行业数据处理中心、行业数据处理中心下发数据于各业务系统、各业务系统向行业数据处理中心发出请求消息,行业数据处理中心针对其请求,进行数据下发等。本系统采用IBMMB作为传输组件,IBMMQ作为消息组件,Log4j作为日志组件。其中,IBMMB:将服务提供方和消费方系统间的行业数据进行传输、解析、简单逻辑处理、转换;IBMMQ:在发生数据交互、数据异常等操作时,发送和接收各消息指令;Log4j:用于控制日志信息输出目标、格式等。消息流程设计消息服务主流程逻辑示意图流程实现图流程描述该流程的核心节点为路由节点和消息处理节点节点,该流程具体描述如下:ESB平台接收请求方的XML消息(格式说明请见接口规范);启动日志记录流程,记录当前服务请求信息ESB平台解析所获取的XML消息取得消息头数据(ESBRoot/Header)取得请求输入参数数据(ESBRoot/Body)将ESBRoot/Header/CreateTime值设为当前时间点取得路由数据。根据ESBRoot/Header/ServiceName和ESBRoot/Header/Sender进行路由选择,取得服务提供者URLSERVICETYPE=0或SERVICETYPE=1表示为数据上报或下发操作请求,ESBRoot/Header/ServiceName代表数据发送方WEB服务名,URL取值为ESBRoot/Header/Sender所代表数据接收方接收数据WEB服务URL,由T_SERVICE_ENTITY.RECEVEURL取得。SERVICETYPE=2表示为服务交互请求,URL取值为ESBRoot/Header/ServiceName所代表的注册WEB服务所提供的URL,由T_SERVICE_INFO.SERVICEURL取得。ESB平台通过URL调用服务提供者所提供的WEB服务。如果SERVICETYPE=0或SERVICETYPE=1则以异步方式调用WEB服务,将解析好的请求消息发至异步服务处理消息队列中,供异步服务处理监听器处理。如果SERVICETYPE=2则以同方式调用WEB服务,取得服务响应结果,并将结果更新至ESBRoot/Body节点下,形成请求回复消息返回至服务发起方。如果期间出现异常情况则将异常简要说明填至ESBRoot/Header/Exception节点下。如果调用成功,则检查目标服务状态,T_SERVICE_INFO表中的STATE字段值,如果当前值为1(不可用),则将其改为0(可用)。服务提供者响应来自ESB平台的服务调用,如果是交互调用(SERVICETYPE=2)则结果数据将XML格式返回至ESB平台,最终ESB平台将结果返回至服务发起方。平台生成此次服务请求执行日志,记录下服务请求完成的时间信息及完成状态。日志的处理流将以异步处理方式进行,将日志发至日志处理消息队列供日志监听器处理。刷新路由缓存消息流程流程图示流程实现图流程描述则在系统启动时,将其路由关系写入缓存,当路由关系表修改后,手动向路由更新监听队列发送路由变更消息,刷新路由缓存消息流程收到该消息后,自动读取变更后的路由关系,重新刷新缓存,以便于系统在传输时,读取最新路由关系。详细流程如下:平台接收到IBMMQ接收队列中的修改缓存通知的消息;RouteInfoRead节点根据路由变更消息,读取路由关系表中变化了路由关系,将其服务ID,服务名称,缓存对象,设置成XML字符串;RouteRefresh节点调用缓存组件及刷新对象,对系统刷新缓存。流程描述<xs:schemaxmlns:xs="/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"> <xs:elementname="ENTER_NAME_OF_ROOT_ELEMENT_HERE"> <xs:annotation> <xs:documentation>Commentdescribingyourrootelement</xs:documentation> </xs:annotation> </xs:element> <xs:complexType> <xs:sequence> <xs:elementname="ESBCache"> <xs:complexType> <xs:sequence> <xs:elementname="ServiceID"type="StringNotNull"> <xs:annotation> <xs:documentation>服务ID</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="ServiceName"type="StringNotNull"> <xs:annotation> <xs:documentation>服务名称</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="CacheObjectName"type="StringNotNull"> <xs:annotation> <xs:documentation>缓存对象名称</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType></xs:schema>日志记录流程逻辑示意图本系统中消息日志分为两种,消息服务日志、异常服务日志日志记录都由IBMMQ配置入口,根据类型不同,由ESB平台后台根据其类型,操作类型消息日志处理工具,将其消息日志信息写入数据库。流程实现图流程描述事件日志消息流(Sub_LogMsgFlow)负责将经过总线的消息进行记录,以便对消息的处理过程进行监控;每个消息正常情况下都会在消息主流中未处理前和处理后两次进入事件日志消息流。HandleLogMsg节点会检查消息体<Header>下是否有元素<FlowOut>,如果没有,则添加元素<LogType>,并设定其值0,表示消息刚进入主流尚未经过处理;如果有,则添加元素<LogType>,并设定其值1,表示消息已经过处理即将要发往Output队列。报文格式定义消息服务流水日志<?xmlversion="1.0"encoding="UTF-8"?><xs:schemaxmlns:xs="/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"> <xs:import/> <xs:elementname="ENTER_NAME_OF_ROOT_ELEMENT_HERE"> <xs:annotation> <xs:documentation>Commentdescribingyourrootelement</xs:documentation> </xs:annotation> </xs:element> <xs:complexType> <xs:sequence> <xs:elementname="head"> <xs:complexType> <xs:sequence> <xs:elementname="HEAD"> <xs:annotation> <xs:documentation>消息头</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:elementname="request"> <xs:complexType> <xs:sequence> <xs:elementname="SERVICENAME"type="StringNotNull"> <xs:annotation> <xs:documentation>服务名称</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="REQETTNAME"type="StringNotNull"> <xs:annotation> <xs:documentation>发送方</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="RECETTNAME"type="StringNotNull"> <xs:annotation> <xs:documentation>接收方</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="CREATETIME"type="StringNotNull"> <xs:annotation> <xs:documentation>日志产生时间</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:elementname="response"> <xs:complexType> <xs:sequence> <xs:elementname="REPMSG"> <xs:annotation> <xs:documentation>返回消息体</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType></xs:schema>消息服务日志是记录其发生消息上报,下发,交互时所产生的消息日志,报文中需要包含服务ID、服务名称、消息名称、消息类型、发送方、接收方、消息体等信息异常消息日志<?xmlversion="1.0"encoding="UTF-8"?><!--editedwithXMLSpyv2011()byweimu(polisman)--><xs:schemaxmlns:xs="/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified"> <xs:import/> <xs:elementname="ENTER_NAME_OF_ROOT_ELEMENT_HERE"> <xs:annotation> <xs:documentation>Commentdescribingyourrootelement</xs:documentation> </xs:annotation> </xs:element> <xs:complexType> <xs:sequence> <xs:elementname="head"> <xs:complexType> <xs:sequence> <xs:elementname="HEAD"> <xs:annotation> <xs:documentation>消息头</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:elementname="request"> <xs:complexType> <xs:sequence> <xs:elementname="SERVICENAME"type="StringNotNull"> <xs:annotation> <xs:documentation>服务名称</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="REQMSG"type="StringNotNull"> <xs:annotation> <xs:documentation>消息类型</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="REQETTNAME"type="StringNotNull"> <xs:annotation> <xs:documentation>发送方</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="RECETTNAME"type="StringNotNull"> <xs:annotation> <xs:documentation>接收方</xs:documentation> </xs:annotation> </xs:element> <xs:elementname="CREATETIME"type="StringNotNull"> <xs:annotation> <xs:documentation>日志产生时间</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:elementname="response"> <xs:complexType> <xs:sequence> <xs:elementname="EXPCONTEXT"> <xs:annotation> <xs:documentation>异常描述</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType></xs:schema>异常消息日志是当发生消息上报,下发,交互时,所发生的异常信息的记录异常处理流程图示流程实现图流程描述ESB在接收请求消息后,在对消息进行处理时捕获异常ErrorMsgCompute节点封装异常信息至请求消息中,形成异常简述及详细说明。异常信息简述将记录至ESBRoot/Header/Exception节点。将记录异常后的消息发至处理消息队列,供异常监听器处理如果由.ConnectException引发的异常.更新服务注册状态数据,将T_SERVICE_INFO表中的STATE字段值,如果当前值为0(可用),则将其改为1(不可用)。报文格式定义报文格式请见接口规范报文规范及接口设计基本原则ESB以统一的WEB服务接口接受和响应接入子系统服务请求请求和响应消息格式为XMLXML消息中分别定义了消息头和消息体两部分消息头必须遵循ESB所指定的规范消息体部分各子系统可自行扩展,但必须位于ESBRoot/Body节点之下参与ESB平台进行交互的各个子系统及其服务必须向ESB注册报文形式ESB请求及回复报文将以XML为格式,XML结构见下节报文内容所述。报文内容节点名称上级节点说明是否业务系统组装备注ESBRoot无根节点是HeaderESBRoot消息头定义是ServiceNameHeader服务名称是SenderHeader服务请求发起系统名称或者下发上报数据的系统名称是CreateTimeHeader消息创建时间格式为YYYY-MM-DDhh:mm:ss是ExceptionHeader异常描述,出现异常时ESB需要组装该XML节点否BodyESBRoot请求或回复消息内容,各子系统可将各自的输入参数或输出结果以XML的格式置于此节点之内是服务发布ESB公布平台接受各个子系统请求的WEB服务接口各子系统向ESB注册系统信息及所公布的WEB服务信息注册各WEB服务输入参数XML结构接口规范输入参数为一个,格式为XML,具体参数信息置于<Body>节点之下,通过解析<Body>节点来取得参数。输出结果格式为XML,结果数据置,于<Body>节点之下,请求方通过解析<Body>节点来取得返回结果请求报文头请见报文内容一节说明,在请求报文中无ESBRoot/Header/Response节点,或节点值为false。应答报文头请见报文内容一节说明,在应答报文中ESBRoot/Header/Response节点值为true。开发说明项目阶段安排阶段开始时间结束时间内容备注设计阶段2012/9/132012/9/17详细设计说明书2012/9/182012/9/18详细设计说明书评审编码2012/9/192012/10/19消息流程、应用场景开发测试、部署2012/10/222012/10/31ESB平台、应用场景测试开发环境个人开发配置操作系统开发工具应用服务器应用软件版本控制数据库JDKWINDOWSECLIPSEWebsphereIBMMB、MQSVNIBMDB2JDK1.5开发服务器配置操作系统应用服务器数据库应用软件JDKWINDOW7WEBSPHERE7.0IBMDB2IBMMB、MQJDK1.5相关参数一览说明参数应用服务器WAS7.0JAVA编译器JDK5.0数据库ORACLE10G应用框架Spring2.0,Hibernate3.0,Struts2.0开发语言JAVA,JSP,HQL/SQL,JavaScript编码UTF-8Web浏览器IE8.0命名规范消息流命名规范消息流的命名分为两段,段与段之间通过下划线“_”分隔:第一段:表示消息流的所属系统;第二段:表示消息流的类型,如Reque

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论