`
xls
  • 浏览: 110358 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

利用OSB (Oracle Service Bus)的Content Streaming处理大消息

阅读更多

利用OSB (Oracle Service Bus)的Content Streaming处理大消息

 


   最近发现有人用OSB (Oracle Service Bus,即原BEA的AquaLogic Service Bus的后续版),传送消息的文本大小 平均接近200K,最大有10M。这种消息大小看来不是常规的一些业务字段,而是较大的业务报文。这样大的消息,又是XML的,恐怕对OSB的性能有影响。


 


    这是你在OSB的代理服务里面使用了Message Flow,里面可能用到你的body的一些子元素的值做判断,然后调用什么服务云云,这些事情的背后的一个前提是你的报文XML是经过解析后成一个JavaBean的,否则其他地方何以读取其中的子元素(用XPath取值或者XQuery等等)。要命的是,如果XML报文很大,对内存的占用就也很大,而且你的系统肯定不是单用户单请求的吧。


 


    其实OSB提供了一种解决方法,即是采用一种称为Content Streaming的方式来支持大消息的传输,要深入理解这个功能并不容易,作为第一步,你可以理解成body不XML解析,因此省掉了解析的时间,也省掉了内存上的大消耗。而方法你只需要在Proxy Service上设置Enable Content Streaming即可(其实选项也有几个variation,后面再说),见下图。



    除此以外,有几个要点,是应当知道的。


    第一点必须知道的重要概念,就是当你为你的Proxy Service打开或者说Enable了Streaming后,你不可以再用修改body的那些Action,如Replace/Delete/Rename。原因不言自明,因为没有做过Parse,也就没有代表XML内容的相应的JavaBean,所以无法修改。


    第二点也很重要也应该知道,SOAP的Header还是会照常被Parse的,你可以读取或者修改header对象。因此,如果你想做所谓Content-Based-Routing的话,你更应当把这类Content放到Header中。


    第三点就是,如果实在必要,其实你还是可以读取body的一部分内容,但是这里要想不影响性能,就有不少要注意的东西和技巧了,否则,就跟没有用Streaming是一样的了,这里的内容分以下几点补充说明(很重要,这是理解streaming的关键):


    - 读取部分内容在OSB的术语上叫做Partial Parsing,即部分解析,只解析XML报文中的部分内容(你想要读的那部分)。


    - 可以用Assign这个Action来读取一个子元素,但是千万要注意你的XPath的写法了。假设你的body里面有子元素myElement,其下再有子元素mySub,那么你可能会用$body/myElement/mySub来读取你的子元素的值,但其实这个写法会导致整体XML被解析而不是Partial Parsing。等我给出正确的写法你就明白为什么了,正确的写法是$body/myElement[1]/mySub[1],它表示找到第一个myElement元素,然后读取它底下的第一个mySub子元素。或许你还以为这两者没什么区别,但在这里区别可大了。有了[1](英文术语叫做indexing)除了表示第一个之外,还表示就这一个(后面第二个什么的不要了);但是没有[1]就表示“所有”的这个名称的元素,也就表示了找到第一个还继续往后面找,直到全部的都找出来,换取话说,$body/myElement/mySub逻辑上可能返回多个mySub元素的集合;说到这里,应该很明了了吧。你或许还觉得,不怕,我的XML报文肯定只有一个myElement/mySub。没错,你没错,但是OSB并不知道,只要你没有写明[1],OSB就认为任务还没有完成,还要继续工作,继续找到报文最末段为止。


    - 上面这点很是费口舌,同时你或许已猜出,OSB是从body的开头就开始进行Parse,直到找到(找齐)你想要的结果为止才结束Parsing。所以,被Parse的那段报文就是body的开头到你的目标元素的这一段。因此,一般来说,你要读取的内容应当在body里面是靠前的部分,这样才可以尽可能减少不必要的Parsing。如果你要找的元素是出现在最后的话,那么就跟没有streaming没什么差别了。


    - 同时,应当减少对body的读取次数,如果可以,你尽量重复利用第一次读取的结果,如:


    Assign "$body/myElement[1]/mySub[1]" to "mysub"


    Assign "$mysub/ele1" to "value1"


    Assign "$mysub/ele2" to "value2"


    以上的写法对body的读取只有一次,但如果你读取ele1时写成是Assign "$body/myElement[1]/mySub[1]/ele1" to "value1",那么你就两次使用body了,这是不建议的。


 


    现在说一说设置Streaming时的选项吧,因为Reliability的缘故,OSB还是会把body的内容用一种串行化(Serialized,而不是XML对应的JavaBean,那个叫Materialized)的形式存放起来,选择Memory则是在消耗内存,但没有IO;选择Disk则是消耗IO,不占用内存。而选择Enable Compression则是消耗CPU,较少内存或者Disk的存量。


 


    最后,值得注意的是,消息体越大,使用streaming的价值就越大,反之亦然。所以,不要盲目在小消息体上使用Streaming。

分享到:
评论

相关推荐

    Oracle Service Bus安装、配置、操作详解(osb/alsb)

    Oracle Service Bus(OSB)是一个基于业务流程管理的集成平台,旨在简化企业应用系统之间的集成和互操作性。OSB 提供了一个基于标准的集成平台,可以快速地集成不同的应用系统,提高企业的业务灵活性和响应速度。 ...

    安装oracle service bus 的先决条件以及说明

    在构建企业级的集成平台时,Oracle Service Bus(简称OSB)扮演着核心角色,它作为消息中间件,能够实现不同系统间的通信与数据交换。为了确保OSB的稳定运行,搭建其环境前必须满足一系列的先决条件,包括操作系统、...

    oracle service bus 12C 使用手册

    Oracle Service Bus (OSB) 12C 是一款高级的消息中间件产品,旨在帮助企业实现服务集成、消息传递以及服务管理等功能。通过使用OSB 12C,组织可以构建复杂的服务网络,支持企业级应用间的通信。 #### 二、创建项目...

    Oracle Service Bus实例开发详解

    1. **定义 Pipeline**:Pipeline是Oracle Service Bus中处理消息传递的一种机制。每个Pipeline由一系列操作组成,如消息的接收、处理、转换等。在本实例中,我们将通过创建Pipeline Pair来实现业务逻辑的处理。...

    Oracle Service Bus Tutorials.pdf

    **Oracle Service Bus (OSB)** 是一个强大的企业级消息中间件,它为服务间的交互提供了高效且可靠的通信通道。作为Oracle融合中间件平台的核心组件之一,OSB支持各种复杂的服务集成场景,包括数据转换、消息路由和...

    Oracle Service Bus 11g Development Cookbook

    Oracle Service Bus 11g Development Cookbook是一本关于Oracle Service Bus(OSB)11g产品开发的专业指导书籍。此书为读者提供了超过80个实用的食谱,旨在帮助开发者在Oracle Service Bus平台上构建面向服务和消息...

    Oracle Service Bus Overview

    ### Oracle Service Bus (OSB)概述 #### 一、为何使用企业服务总线(ESB)? 在探讨Oracle Service Bus之前,我们首先理解一下为何需要使用企业服务总线(Enterprise Service Bus, ESB)。传统的点对点集成方式存在诸多...

    Oracle Service Bus 11g Development Cookbook.pdf and code

    本文档包含 Oracle Service Bus 11g Development Cookbook.pdf 高清版(英文), Oracle Service Bus 11g Development Cookbook本书的代码 和 Oracle Service Bus实例开发详解.pdf 此书(中文)也能快速搭建osb项目

    Oracle Service Bus下载的配置

    【Oracle Service Bus (OSB) 下载配置】 Oracle Service Bus 是一个全面的集成平台,用于构建、部署和管理企业服务总线(ESB)解决方案。它允许开发人员将不同的业务系统和服务连接起来,提供中央化的管理和监控。...

    Oracle Service Bus 安装和条件

    Oracle Service Bus (OSB) 是一款强大的企业服务总线 (ESB) 解决方案,用于集成和管理企业的应用程序和服务。在开始安装之前,需要确保满足一系列的系统要求和环境条件。以下是对安装条件和流程的详细说明: 1. **...

    Oracle Service Bus (OSB) 10.3.1–通过DB dapter 服务的JCA 传输开发与配置说明V2.2.doc

    Oracle Service Bus (OSB) 10.3.1 是一款强大的企业级集成平台,它提供了灵活的服务化、路由和转换功能,使得企业能够轻松地整合各种应用和系统。DB Adapter 服务是 OSB 中的一个关键组件,允许开发者通过 Java ...

    Oracle Service Bus

    《Oracle Service Bus 11g Development Cookbook》是针对Oracle Service Bus (OSB) 平台的一本实战指南,旨在帮助开发者深入理解和应用OSB在企业服务总线(ESB)解决方案中的各种功能和最佳实践。Oracle Service Bus是...

    The Definitive Guide to SOA Oracle Service Bus 2nd.Edition 源码

    学习Service Bus的第一个问题一定是,ALSB或者说OSB能做什么,或者说为什么需要OSB,对于这个问题的疑问在于在所谓的service-enable企业里,既然已经有了所谓的拥有建立Web Service的平台(如Weblogic应用服务器),...

    oracle services bus

    Oracle服务总线(Oracle Services Bus,简称OSB)是Oracle公司提供的一款强大的企业服务总线(Enterprise Service Bus,ESB)解决方案。它旨在简化企业应用集成,通过提供一个统一的平台来连接不同的系统、服务和...

    Oracle_Service_Bus 安装 与 配置详解

    Oracle Service Bus (OSB) 是 Oracle 公司提供的一款企业级服务总线,用于整合不同系统和服务,实现数据集成和业务流程编排。本篇将详细介绍如何安装和配置 OSB。 首先,要安装 Oracle Service Bus,你需要从官方...

    oracle osb 白皮书

    ### Oracle Service Bus (OSB) 关键知识点解析 #### 一、概述 Oracle Service Bus (OSB) 是一款由Oracle公司开发的企业级服务总线产品,旨在为组织提供一种高效、可靠的方式来集成不同的应用程序和服务。OSB 基于...

    SOA Definitive Guide: Oracle Service Bus (second edition)

    根据提供的文件信息,本书《SOA Definitive Guide:Oracle Service Bus 第二版》是一部深入探讨面向服务架构(SOA)及其与Oracle Service Bus (OSB) 集成的专业指南。以下是书中涵盖的一些关键知识点: ### SOA概述...

    Oralce Service Bus练习指导手册

    Oracle Service Bus (OSB) 安装 **重要知识点:** - **OSB 版本**: 本手册涉及的是 Oracle Service Bus 10g R3 版本。 - **操作系统支持**: 提供了针对 Windows 和 Linux 的安装指南。Windows 版本使用 `.exe` ...

Global site tag (gtag.js) - Google Analytics