CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

ESB开发实践小结

作者: 皮山杉,  出处:Dev2Dev, 责任编辑: 叶江, 
2007-07-05 14:15
  本指南描述了服务总线(ESB)的典型使用场景、设计模式和实践经验……

  使用流程元素

  ESB提供了丰富的消息流程处理的模型,可以有多种方式来实现。因此需要有一个指导来表明在何时使用哪种方式比较适合。

  何处执行转换(Transformations)

  路由节点(route node)是消息流树上的一个页节点。如果我们需要转换成或需要转换的消息格式依赖于目标服务,因此在路由节点(route node)或发布节点(publish node)中的请求/响应动作。在发布节点的操作中,任何请求过程中的数据转换是发布动作目标服务所私有的。换一种方式讲,当发布完成后,任何请求信息的改变会回滚到初始状态。另一种请求动作是在outbound上下文变量($outbound)中设定控制变量来影响系统对于发送出去消息的操作(如:设定服务质量QoS等)。

  如果转换是在消息请求(或消息响应)过程中执行,而不考虑路由终点,那么需要在请求(或响应)的管道中配置消息转换。

  例如,对于一个大批量的订单,需要对收到的SOAP报文生成一个订单汇总,并通过eMail发送给采购经理。为支持这种场景,在请求管道中需要包含一个发布动作。如果订单很大,请求动作需要将该订单转换成一个订单汇总,并将$attachments变量中的附件信息全部删除

  假设请求中附件信息的转换不需要理会最终的路由节点,因此建议在请求管道中的一个阶段(stage)将附件进行格式的转换。

  假设消息需要根据WS-addressing头信息路由到两个终点中的一个。其中第二个终点(Web Service)需要将SOAP消息体中的订单转换到一个新版本。此时,路由节点需要进行条件路由,以将信息发送到两个终点中的一个,在第二个路由终点的请求动作中需要对订单信息进行格式转换。另外,如果该服务采用的是JMS方式发送,还可以在$outbound变量中设定QoS为“exactly once”。

  何时需要在消息流中使用分支

  如果一个代理服务提供的WSDL中包含多个操作,通常建议采用操作分支(operational branching)来对每个操作分别处理消息。

  如果一个代理服务的类型是 Any SOAP 或 Any XML,就需要在阶段动作中判断消息具体类型,然后需要一个条件分支(conditional branching),通过条件分支节点来根据消息类型路由消息 。

  条件分支可以用于代理服务的最外层,来对外提供路由选择。例如:如果需要根据条件来调用服务A或服务B,上述动作如果不在路由节点中实现的话,就需要在消息流中配置条件路由。在每个分支中使用路由节点作为其子节点,这是一种典型的决策方式,但如果消息分支数量比较多的时候,配置每个分支中子节点的路由就不能算是一个好的方案了。

  设计单一或多阶段(Stage Action)

  管道中单一的阶段通常能够满足大多数使用案例。但是有些情况下,需要考虑多个阶段动作(stage action)。

  •   相比于把所有用户操作放置到一个阶段动作中,采用多阶段的设计模式提供了一个自然的模块化设计机制。
  •   在请求或响应的管道中,每个阶段可以具有独立的差错处理能力。当在管道中采用多个阶段操作,就可以避免在一个差错处理中来考虑各种动作所产生的差错处理。
  •   如果使用了resume 动作(在差错处理中)或 skip 动作,其行为是在请求/响应管道的下一个阶段恢复处理。因此考虑到需要强调的业务逻辑,将resume 动作或 skip 动作之后的动作放置到下一个阶段中是一个好的设计原则。
    共7页。 1 2 3 4 5 6 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i