原文作者:人月神话 深圳市远行科技有限公司 公司副总经理
Oracle-SOA-OSB功能分析
今天介绍下Oracle OSB的基础核心概念和核心功能分析,在前面两篇文章里面重点介绍了Oralce官方在线文档中的入门介绍和关键功能Task任务文档说明。今天篇核心原理介绍。对于OSB核心仍然是代理服务,业务服务和中间的业务处理管道三个部分的内容。
代理服务(Proxy Service)
包括了处理请求和可选的响应消息的消息处理逻辑,同时提供给外部消费方可以调用的接口。也就是说代理服务是OSB真正对外保留的接口服务能力。
业务服务(Business Service)
实际提供业务处理能力的服务,一个业务系统提供的一个业务处理Service服务就是一个业务服务。而在OSB的业务服务重点则是指将对外部业务服务的引用,外部遗留系统的适配最终映射到OSB上生成一个对应的提供业务能力的服务组件(Wraps the external systems the OSB calls)。
消息格式和内容转换(Messsage Transformation)
消息转换是OSB的一个重要内容,即不同的Inbound/Outbound消息格式之间能够相互进行转换。在OSB 12c当前可以提供三种方法进行消息转换,主要包括了:
Use XQuery, XSLT, and XPath
Use domain value maps (DVM)
Use cross reference tables
而实际上当前我们使用最多的仍然是XQuery+XSLT进行消息转换。在11g的时候更多的是使用XQuery+XPath代码的方式进行转换和映射,而在12c版本已经增加了XSLT的可视化数据映射能力,这是消息转换这块相对大的一个能力提升。但是采用 XSLT的时候会带来一定程度的性能损耗。对于主域值映射和交叉引用表实际在项目中使用的不算多,比如对于DVM还提供了基于Lookup动态映射功能,如果有相关需求场景可以考虑。
消息路由和动态路由(Routing and Dynamic Routing)
路由是OSB的另外一个重要功能,实际在OSB进行服务封装和设计的时候仍然是在Pipeline中进行设计和完成。
路由本身则是通过条件分支判断或者路由表来确定服务请求究竟路由到哪个业务服务上,对于用作路由判断的参数条件可以实际在SOAP Header中传递过来。
其次,动态路由功能也是一个场用的功能,即在设计Business Servie业务服务的时候,URI端点地址可以通过Routing Options action进行动态设置和指定。这样就避免了对于Extenal Servie业务服务都需要提前先设计多个Business Service服务进行映射。在进行服务动态路由的时候,外部多个服务需要遵循相同的WSDL服务契约标准格式。
消息增强和丰富(Message Enrichment)
在OSB中的Pipeline管道设计中,对于Action有三种类型:
1.Route Action: 路由操作(通过异步操作特性来防止现场阻塞)
2.Publish Action:发布操作 (发布操作是单向发送。它提供了调用外部服务的方法,但是没有收到响应)
3.Service Callout Action(在将请求路由到目标服务之前调用外部服务来丰富请求消息的能力)
对于消息的增强和丰富即是通过Service Callout Action操作来完成,即既可以在Proxy代理服务在接收到消息请求后先进行增强在转发和路由到业务服务,也可以是在得到了业务服务的返回后进行消息增强处理后再返回给服务消费方。
服务缓冲池(Service Pooling)
服务缓冲池更多的是在服务消费方和原始服务提供方之间增加更多的可靠性,可以通过服务池来提供高可用性和服务弹性扩展能力。同时在到目标源服务的网络连接出现短暂中断的时候,通过服务池提供的机制可以设置重试次数和重试时间,自动的发起重试操作。
同时可以通过服务缓冲池连接到多个提供通用能力的目标端业务服务,这个时候缓冲池能够提供相应的负载均衡能力,容错能力。当目标节点某个URI节点不能访问的时候可以自动进行故障隔离。同时对于负载均衡算法也支持轮询,随机等多种负载均衡算法选择。
服务结果集缓存(Service Result Cache)
对于只读服务调用可以启用服务结果集缓存,在企业结果集缓存的时候注意缓存失效时间的设置,可以使用默认值,也可以使用自己指定的缓存失效时间。
Oracle Service Bus支持服务缓存,通过完全图形化配置的方式,可轻松调整服务的缓存策略,无需进行代码编写,通过缓存能力,可大幅提升服务的响应效率,并降低数据库的业务查询压力。
流量控制(Work Manager and Message Trotting)
Message Trotting即OSB服务总线提供的消息节流特性,即在Proxy Service和Business Service之间增加了一个消息缓冲和排队区。我们可以设置最大允许的队列排队数,最大的并发线程数,以及消息的过期时间设置等。消息节流可以很好的起到对目标系统的缓冲作用,即即使出现消费方出现大并发的消息发送调用,我们通过节流和Queue队列仍然可以实现平滑的将服务请求推送的目标业务系统中。这有点类似我们在说传统的消息中间件的时候,当接收到大并发服务请求后的对下游的削峰能力。
对于Work Manager流量控制,在百度文库有《OSB-深度使用总结》可以详细参考,可以看到对于Message Trotting只是对消息的入口进行流控,而对于Work Manager则可以实现消息入和消息出的双向流量控制能力。基本的设置参数仍然是最小,最大的线程并发数,最大的请求排队数等指标。对于资源占比率设置则主要是调整多个服务大并发下的资源优先级分配策略。
拆分-合并(Split-Join)
使用拆分连接将大消息拆分为许多较小的消息,并并行处理它们,最后再将结果聚合成一个大型的响应消息。即OSB首先将接收到的大消息体按一定的规则拆分为多个子消息,然后再将子消息并行发送大目标系统,对于目标系统返回的多个子结果再进行join合并以返回一个完整的结果给消息发送方。
拆分-合并更多的是提升了消息发送和接收相应的性能。
遗留系统集成和适配能力
对于遗留系统的适配是OSB的一个核心能力,例如对于数据库的适配可以通过JCA Adapter适配器来完成,包括适配到数据库表和具体到对存储过程的适配能力。同时适配器还包括FTP,TCP Socket,FILE文件,JMS,AQ等各种消息和协议的适配。
对于Java EJB组件提供的方法也可以通过OSB提供的EJB Transport适配后将EJB组件中的方法暴露为一个SOAP WebService服务能力。
Oracle-SOA-OSB技术原理1
消息交换总线技术是为了实现企业数据共享和应用集成,提供一种基于企业服务总线(ESB)的信息共享交换平台。该技术采用面向服务体系结构(SOA)的设计思想,以信息共享为目标,具有松散耦合的特点,实现了"集中式管理、分布式运行"的工作模式。通过设计标准的适配器组件,实现各种数据库和应用系统之间的数据共享与交换,能有效实现企业中信息共享,并具有良好的可扩展性和可靠性。
Oracle的OSB总线包括ESB(Enterprise Service Bus)和 WSM(Web Service Management)两大部分,是ORACLE公司的消息交换总线产品。ESB包括MOM, ORBs, RPCs, WebServices功能的新型、综合类型中间件,通过配置集成;WSM包括服务管理,消息跟踪两个部分。使用OSB可以很容易的将企业已有的对外功能集成进来,并且能够集成和开发出来新的功能。
ESB服务总线的核心功能在前面很多文档里面有已经介绍过,在这里再做简单总结:
服务代理和位置透明
ESB的一个重要功能,即将遗留系统或外部接口或服务能力接入到ESB,通过ESB再包一层后形成统一的服务目录朝外部发布,起到服务中介和原始无法位置透明的作用。最简单的服务代理就是仅仅只做服务路由转发,其它啥都不做,因此在OSB消息流绘制最简单的就是重要的pipeline是空的,仅仅只有业务服务和代理服务。
协议转换和遗留系统适配接入
协议转换是ESB的一个重要功能,其中包括了HTTP,TCP,FTP,JMS,EJB,MQ,FILE,SMTP等多种协议之间转换和适配能力。比如你可以接收一个SOAP WS服务调用请求,并将接收到消息写入到JMS;或者说你也可以通过JCA适配到某一个数据库,将数据库表发布为一个Http Rest查询服务接口。
消息格式和内容转换
这个一定要和协议转换分开来谈,支持多种消息格式和类型往往就是指的可以通过transform和数据映射功能将XML,JSON,Flat File,MFL等多种消息格式类型之间进行数据映射和转换。举例来说,你可以服务调用的输入都是Http Rest服务接口,但是输入可以是Json格式,而输出可以转换为XML文本输出。
服务路由(包括静态路由和动态路由)
路由是ESB中非常重要的仲裁逻辑之一。路由场景是非常普遍的。譬如,针对不同的客户提供不同QoS的场景,执行时需根据客户的类型将其路由到不同执行能力的服务提供者;再比如当响应消息到达ESB时,总是需要将该响应消息送回最初的服务请求者处。
路由可分为静态路由和动态路由。静态路由指得是设计时已经明确路由分支的情况,而动态路由的路由分支选择是在运行时动态确定的。不论是静态路由还是动态路由,路由分支的选择一定伴随着一个或一系列决策依据。决策依据可简单如一个If-Else语句,也可以复杂到需要通过多维决策表并通过多次判断才能得到最后的路由分支。
数据映射转换(Transform)& 内容丰富(Service Enrichment)
数据映射转换是ESB的另外一个核心功能,举个例子来说我们根据一个标准的WSDL契约要求定义一个代理服务,而对于业务服务则是适配和连接到一个数据库表并返回一个结果集,那么这个WSDL结构就需要和数据库返回结果集的业务服务间进行数据映射和转换。
一般而言,大多数ESB产品都提供了多种数据转换的方式,很多产商宣传中力推的都是“拖拽式”可视化映射的转换方式。该功能听起来的确很酷,看上去很直观。但是正如我们前面所说的,ESB是一个偏向技术层整合的组件,业务人员一般不会关心XML是如何转换成SOAP的。所以,对于开发者来说,这种“炫”功能并无太大吸引力。更重要的是,他们可能非常习惯于自己的编程语言,如Java、XSLT、ESQL和PHP等,这些语言操作起来要简单很多。
在OSB 12C增加了可视化的XSLT数据映射功能,XSLT是一个标准的XML转换语言,使用XSLT实现的转换逻辑可很轻易地在不同ESB产品间移植。几乎所有主流商业ESB产品都支持XSLT的转换机制。
对于内容丰富来说,举例来说当接收到消费者的服务调用请求后,我们需要对输入消息内容进行补填再去调用原始的业务服务,也可能是OSB接收到Response返回消息后,我们会进一步补充实例ID,服务状态等信息后再返回给服务消费方,这些都属于内容丰富的范畴。
消息处理机制和运行原理
OSB中的服务包括代理服务(Proxy Service)和业务服务(Business Service)两种。业务服务一般用作将外部已有服务接入到OSB总线上,代理服务的作用是将已有服务进行重新包装和整合,进行服务路由、逻辑处理之后对外发布新的服务。
在OSB消息流中,一般都是通过Proxy Service对外发布服务的,客户端通过调用在Proxy Service中定义好的URL来调用OSB总线上的服务。
当客户端调用Proxy Service的时候,消息先经过Proxy Service传输层(Transport)进入,传输层是有协议的,他可以解析和接入各种传输协议;然后通过绑定层(Binding)对传输层接入的消息及协议进行解析 ,对消息内容进行解析并且存放到上下文变量中,经过绑定层解析后的消息格式一般是通过SOAP格式进行包装并且附在以后的整个消息流传输过程中,以后的处理节点就通过访问上下文变量来查看、获取、编辑消息内容和消息结构;当然,在绑定层解析之后,消息协议仍然可以访问,绑定层会将协议信息存放在上下文变量中的$inbound变量中。消息输出时候的处理过程与消息输入相反。
OSB核心经过Pipeline管道来进行消息路由,转换,映射,异常处理等一系列操作,如下图:
里面的几个关键组件为:
l Pipeline表示一个消息流转中批量的处理逻辑
l Stage可以被认为是一组动作处理的容器
l Action是消息流中的逻辑,它用于具体决定如何处理消息
l Branch节点可以让流程处理进入具体多个可能的处理路径中的一个
在OSB消息流开发过程中,对于各种功能节点都可以使用XQUERY或者XPATH语言对节点属性、处理流程进行配置;而对于消息流的流程控制语句也是使用XQUERY来实现的。对XQUERY和XPATH有个基本的了解是能够进行消息流深入开发的重要基础。
XPATH是标准的XML表达式语言,用于标识或定位XML文档中的某一部分,对于很多消息处理节点中的配置参数,都需要使用XPATH语言来表述,如对于DELETE(作用是删除消息中的某个元素或者属性)处理节点,就需要使用XPATH语言来描述删除目标元素;XQUERY是一种用于XML文档的结构化语言,用来描述循环和判断、函数处理、流程处理和控制、构造SOAP消息、处理消息结构和内容等处理命令的一种语言。在OSB上,一般比较复杂的处理逻辑都需要这两种语言来实现。
OSB中对消息结构/内容进行转换一般通过XQUERY语言来实现,可以在WORKSHOP中使用可视化界面进行拖拽操作来实现消息格式转换,然后将生成的xq文件上传到控制台即可。
OSB中的其它关键术语进一步解释和说明
业务服务(Business Service)
业务服务是您要与其交换消息的企业服务的AquaLogic ServiceBus 定义。使用WSDL(Web Services 定义语言)定义业务服务的方式与定义代理服务的方式相同。但是,业务服务的配置与代理服务的配置不同,因为业务服务没有管道。因此,不是由BEAAquaLogic Service Bus 管道实现的服务即为业务服务。
Business Service是在OSB中所定义的,用于表示希望与后端交换信息的企业服务。
代理服务(Proxy Service)
代理服务是在WebLogic Server 上本地实现的服务的AquaLogicService Bus 定义。可以在WSDL、管道和策略等方面定义代理服务。如果代理服务需要安全凭据,则可以创建代理服务提供程序,以管理这些从AquaLogic Service Bus 控制台映射到密钥库条目的安全证书。通过配置代理服务的消息流可以实现代理服务。消息流可包括下列节点:启动、管道对、分支和路由。
端点(Endpoint)
一个基于资源定位标志符的地址。Business Service的端点是接入的外部服务的资源地址;而Proxy Service是对外发布的新服务的资源地址。
注意WSDL地址和端点地址不同,在访问到WSDL后,断点地址在WSDL的Port部分可以看到具体location。
消息流(Message Flow)
消息流定义了代理服务的实现。消息流可以包括管道对和下列节点:开始、路由和分支。消息路由、业务逻辑处理、服务编排、服务整合等操作都是在消息流中实现,在OSB开发中,主要工作就是消息流的开发和调试。
管道对(Pipeline Pair)
通过“编辑消息流”页可以添加管道对节点。管道对节点包含一个请求管道和一个响应管道。消息流可以不包含管道对节点,也可以包含多个管道对节点:代理服务(或对服务的操作)的请求和响应管道,以及可为阶段、管道和代理服务定义的错误处理程序管道。管道可以包括一个或多个阶段,阶段又可以包括操作。
阶段(Stage )
阶段是操作的容器,如消息路由、日志记录、消息广播、消息传送等操作都可以放到阶段中操作。
动作(Action )
动作是用户定义的运行时的逻辑步骤,用户需要实现的功能一般通过添加动作节点来实现,OSB已经提供了很多不同类型功能各异的默认节点,方便用户进行消息流开发。
路由节点(Route Node )
路由节点是在管道对中的请求和返回之间的交换节点,主要是用于调用业务服务。用于定义消息目标的容器也可以用于执行单向通信,例如使用文件或email作为代理服务中请求处理和应答处理的分界点当Route节点分发了请求消息后,请求处理就认为结束,而当Route节点收到应答消息时,表明应答处理的开始。
路由节点一般出现在管道对之后,处于管道对中的请求和应答之间。
上下文变量(Context Variables)
上下文变量是消息进入OSB总线之后的存储载体。在消息通过传输层之后,绑定层会自动根据消息协议和消息内容,将其绑定到上下文变量中;当消息要输出OSB之前,OSB会根据需要自动将上下文变量中的消息内容转换成为符合输出协议类型的消息格式。
上下文变量主要包括以下结构:
l $header: 包含SOAP 消息的SOAP 标头(用于包含SOAP 标头的SOAP 消息)。header 变量对于非SOAP 消息类型包含一个空的SOAP 头元素。
l $body: 有下列几种情况:SOAP 消息- 包含从SOAP 信封中提取的 部分;非SOAP、非二进制消息- 包含包括在 元素中的整个消息内容。二进制消息- 包含包括在 中的对该二进制消息的内存中副本的引用。
l $attachments: 包含某个特定消息的MIME 附件。
l $fault: 包含在消息处理期间所发生错误的相关信息。
OSB中的消息上下文是一组存储消息内容的属性,并提供消息的元信息。
Oracle-SOA-OSB技术原理2
从OSB的功能架构图可以看到,实际的OSB架构包括了消息适配,统一安全管理,配置框架,服务虚拟化,服务管理几个部分的内容。而对于实际的服务封装(代理服务,业务服务,管道)都在服务虚拟化部分里面,功能图上只是列出了基于内容动态路由,消息转换和服务消息链等几个关键点。
对于OSB服务总线,基本支持业界常见的各种消息服务接入。
Web Service Transports
l HTTP/SOAP, REST, WS-I, WS-Security,WS-Policy, WS-Addressing
l SOAP v1.2 and v1.1
传统的消息
l HTTP, JMS, AQ, MQ Native transport,EJB/RMI, Tuxedo, FTP, SMTP, File
l EJB/RMI on WebSphere
Transport SDK
l Enterprise-specific custom transports
JCA Adpaters
l Build-in Oracle EBS, Database
l PeopleSoft, Siebel, JD Edwards,SAP
协同工作能力
l .NET, Tibco EMS, IBM WebSphere, Apache Axis, Cyclone B2B Interchange, iWay 5.5 adapters
统一安全管理
对于服务安全管理,最常说的就是服务的传输安全,消息安全,访问控制安全,数据安全等标准内容。而对于功能架构图里面主要是在强调认证、授权、身份验证,签名/加密几个方面的内容。而对于OSB的安全管理体系,个人认为重点仍然要放在OWSM和安全策略上面。
OWSM是用于安全、管理和治理的策略创建的运行时框架。您可以创建策略,将它们附加到服务总线中的服务,并在消息传递生命周期中与OWSM代理一起执行这些策略。Oracle Web服务管理器(OWSM)是服务总线使用的Web服务安全机制。所有新创建的资源,如业务服务和代理服务,都使用OWSM策略来保证安全性。WLS 9策略被弃用,不能用于为新的服务总线资源配置安全性。
服务虚拟化(Service Virtualization)
强大的服务组装能力基本全部体现在服务虚拟化部分,即实际的服务开发和封装,服务路由和转换等基本都是服务虚拟化的内容,包括我们实际在OSB操作中的业务服务和代理服务的创建,消息流的绘制(管道创建,验证,路由,Split/Join)等操作。
具体的服务虚拟化和OSB强大的服务组装能力基本可以参考下图:
OSB支持的协议(Protocols)和消息格式
这是11g里面的一页PPT,对于OSB支持的协议和消息格式相对来说是相对完整,包括了对TCP(Socket)等协议的支持能力。同时对于消息格式包括了对Json,MFL,FlatFile等各种消息格式。
Proxy消息处理机制
这里面需要深入了解,即整个消息处理和运行机制是如何的,具体如下:
1. 传输层Transport Layer(接收消息)
2. 绑定层Binding Layer (解包消息,得到真正的消息体)
3. 代理服务Proxy Service(消息处理逻辑)
4. 绑定层Binding Layer (打包消息,得到真正的消息体)
5. 传输层Transport Layer(返回和发送消息)
Business Service是在OSB中所定义的,用于表示希望与后端交换信息的企业服务,理解这点相当重要。因为你既可以把外部已有的业务系统提供的WS引入并映射为一个业务服务,也可以在通过JCA等适配后将外部的业务系统能力发布为一个业务服务。
消息流的绘制和处理(Message Flow)
对于消息流的绘制重点还是在管道Pipeline上,而管道核心是包括了Request请求处理,调用Business Service服务,Response返回三个部分的内容。管道真正将以上三个部分衔接为一个整体,也是OSB的轻量服务能力编排的重要体现。
通过管道就可以实现消息路由,验证和校验,异常处理,Split/Join等操作。
消息格式和内容转换(Transformation)
l XML to XML (XQuery or XSLT)
l XML to Text/Binary (XQuery)
l Binary to Binary (MFL)
而实际上当前我们使用最多的仍然是XQuery+XSLT进行消息转换。在11g的时候更多的是使用XQuery+XPath代码的方式进行转换和映射,而在12c版本已经增加了XSLT的可视化数据映射能力,这是消息转换这块相对大的一个能力提升。
Oracle-SOA-OSB代理服务封装
在进入到osb console控制台后,首先通过右键菜单创建一个新项目,在OSBProject可以看到一个完整的已经设计封装完成的代理服务项目的目录和资源结构,具体如下:
我们首先通过右键菜单创建一个TestProj_Heminglu的新项目出来,然后在这个新项目下创建BusinessServices,ProxyServices,Resources三个子文件夹来分别存放代理服务,业务服务和资源文件信息。在将详细创建过程前,我们先介绍下,在osb console控制台点击右键菜单后创建->资源后可以创建的服务和资源类型信息。
第一个tab是服务,在服务tab里面可以看到,可以创建代理服务,业务服务和管道。
代理服务:代理服务是在 Service Bus 上本地托管的通用中介 Web 服务的 Service Bus 定义。代理服务通过接口 (不一定等同于服务提供程序或服务使用者业务服务的接口) 与外部服务进行通信。
业务服务:业务服务是在业务处理期间交换消息的企业服务的 Service Bus 定义。业务服务的配置包括其接口 (服务类型), 其用于与服务生成器连接的传输类型和配置, 安全要求, 消息处理, 性能优化和 SLA 预警规则。
第二个Tab是接口,更多的是接口契约,里面包括了WSDL,WADL,方案,WS策略等。其中WSDL是常说的基于SOAP WS的服务接口契约,而WADL则是基于REST服务接口的服务契约。
Web 服务策略框架 (WS-Policy)是一个基于 XML 的可扩展框架, 它使用域特定的安全断言扩展 Web 服务的配置, 并指定 Web 服务的安全要求, 期望和功能。在 Service Bus 中, WS-Policy 的主要用途之一是在代理服务和业务服务中配置消息级安全性。
JCA 绑定资源允许您创建通过 Oracle SOA Suite JCA 适配器与外部服务交互的业务服务和代理服务。JCA 绑定由服务 WSDL 文档和在 Oracle JDeveloper 中创建的相应 JCA 文件组成。在 Oracle Service Bus 控制台中, 需要将 JCA 文件上载到 JCA 绑定资源中才能基于该 JCA 适配器创建业务服务或代理服务。即JCA绑定主要用于数据库适配方面使用。
第三个Tab是转换方面的,里面包括了Xquery和XSLT和MFL,其中Xquery和XSLT主要用于WS服务接口,XML间的数据映射和转换。MFL主要用于二进制消息流的数据映射和转换。
XQuery资源允许您定义用于在 XML, 非 XML 和 Java 数据类型之间转换数据的映射, 以便快速集成异构应用程序。XQuery 资源还可以包含 XQuery 代码段, 以便使用 XPath 查询 XML 文档并获取数据。
可扩展样式表语言转换 (XSLT)映射描述 XML 到 XML 的映射。使用“创建 XSLT 文档”对话框可以为 Service Bus 项目创建新的 XSLT 转换。
MFL资源:Oracle JDeveloper 中提供的 Oracle Format Builder 允许您定义非 XML 数据记录的消息结构。定义二进制记录的层次, 字段的布局以及字段和组的分组时, 该信息将另存为消息格式语言 (MFL) 文档, 之后可以使用该文档执行运行时转换。使用 Format Builder 创建 MFL 文档后, 便可以通过创建 MFL 资源并将文件上载到该资源将文件导入到 Oracle Service Bus 中。
剩余的安全和其它两个Tab不再做进一步介绍,可以创建的基础资源介绍完成后,还是回到刚才代理服务的介绍,我们采用互联网已有的查询天气一个wsdl服务地址进行封装,将其发布为一个代理服务。
1. 导入WSDL资源文件
访问到该WSDL地址和文件后,通过网页另存为,将其存储为一个本地文件globalweather.wsdl文件。
创建一个Resource的资源文件夹,然后右键文件夹,点击创建资源->接口->wsdl创建资源,资源名为globalweather.wsdl,然后点击文件上载按钮上传上步存储到本地的wsdl文件。
2. 创建代理服务
在WSDL资源导入完成后,可以开始创建代理服务,代理服务是OSB发布出去的服务。首先创建一个ProxyServices文件夹,然后选中文件夹右键点击创建资源->服务->代理服务创建代理服务。代理服务的创建本身有三种类型,即:
l SOAP
l 类型化/无类型 REST
l 向导中的类型化 REST (带 WADL)
在这里我们使用SOAP WS代理服务,对于Rest服务接口后续再做进一步详细介绍。代理服务资源名我们定义为GetWeatherInfoSrv_Proxy,对于服务定义为基于WSDl的服务,通过选择按钮,搜索,然后选中到刚才定义和导入的WSDL资源文件。选后对于端口/绑定,我们选择SOAP 1.1的版本保留兼容性。
对于管道部分checkbox默认选中,这样在代理服务创建完成后会自动创建管道。具体配置完成后的参考界面如下,可以看到配置的详细信息。
代理服务的创建向导最后一步涉及到端点地址,这个端点URI是可以任意配置的,用于和外部接口交互服务消费者使用的服务接口端点地址。你可以修改这端点地址,比如模式端点地址为:
/TestProj_Heminglu/ProxyServices/GetWeatherInfoSrv_Proxy
你也可以将前面的项目路径部分去掉,仅仅保留/ProxyServices/GetWeatherInfoSrv_Proxy
3. 创建业务服务
我们实际调用的外部服务的端点地址信息在创建业务服的时候要使用到。
首先还是创建一个BusinessServices的文件夹,然后右键点击创建->资源->服务->业务服务来创建一个业务服务。业务服务资源名定义为GetWeatherInfoSrv_Business,
传输部分注意端点地址的配置,该端点地址即为外部实际的端点地址。负载均衡算法暂时默认不用修改。
4. 管道和消息流绘制
在代理服务,业务服务和资源文件全部创建和配置好,剩下的工作就是打开管道进行消息流的实际绘制,简单来说就是将代理服务和业务服务衔接到一起来。中间涉及到路由,分支或异常处理等。
在打开消息流绘制界面后,选择到管道节点,可以看到出现的菜单中可以添加管道对,添加路由,添加条件分支等各种选择。通过添加这些内容进行消息流绘制。在这个案例中我们首先要添加路由,即将Proxy代理服务路由到实际提供业务能力的外部业务服务上。
实际我们要做的事情具体如下:
1. 选择到管道节点后,在菜单中选择添加路由,增加一个路由节点RouteNode1。
2. 选择到RouteNode1节点,在出现的菜单中点击编辑路由。
3. 点击编辑路由后,按如下进行菜单和按钮点击添加操作-》通信-》路由,进入到路由编辑界面。
4. 在出现的编辑里面种有一个路由到服务,选择服务超链接,进入到服务选择界面
5. 在服务选择界面中选择我们刚才创建好的业务服务信息。
如果觉得本文有用就分享给更多的人看到吧!
扫描QQ群二维码:
获取免费的架构师学习资料哦!
领取专属 10元无门槛券
私享最新 技术干货