有没有更好的方法来设置此序列以提高性能?

时间:2015-10-02 03:31:59

标签: wso2esb wso2dss

所以我设法让esb原型工作。基本上我们使用两个代理/序列通过VFS引入两个XML文件,我们需要解析它们并将数据发送到DSS服务,以便将数据插入到表中。当我们使用一个小文件(大约500 kb - 2200行数据左右)时,流程工作正常,表格会在几分钟后更新。我相信这是因为我正在遍历所有行并一次一个地发送数据到DSS进行插入。

当我使用更大的文件(大约50MB - 大约217440行数据)时,代理将锁定文件并花费大约15到30秒来使用数据,但我从未看到数据到达DSS。

我为ESB分配了3GB的内存,并在将文件发布到' in'目录,我看到它上升并徘徊在2.0 - 2.5 GB左右,从不降低。所以我认为它仍在处理数据。

我刚注意到的一件事就是在输入这个时,在调解追踪器中我注意到最后一个条目是在Iterator上。也许它可能会被过滤器挂在那里?我是否需要使用与迭代器不同的东西?

wso2esb是否设计用于处理这么大的文件?我预计文件大小可达250MB(或XML中的1329313行数据)。我已经看到了使用Smooks和JMS的参考,但我不确定这是否适合这种情况,因为对于非常大的文件,ESB甚至无法从代理中提取它。

谢谢。

这是我在ESB中使用的序列/代理的副本。

代理

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="MyProxy"
       transports="https,http,local,vfs"
       statistics="disable"
       trace="enable"
       startOnLoad="true">
   <target>
      <inSequence>
         <property name="targetfilename" value="TITLES"/>
         <log level="full"/>
         <clone>
            <target sequence="MySequence"/>
         </clone>
      </inSequence>
   </target>
   <parameter name="transport.vfs.Streaming">true</parameter>
   <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
   <parameter name="transport.PollInterval">15</parameter>
   <parameter name="transport.vfs.MoveAfterProcess">file:///var/process/rroriginal</parameter>
   <parameter name="transport.vfs.FileURI">file:///var/process/rrin</parameter>
   <parameter name="transport.vfs.MoveAfterFailure">file:///var/process/rrfault</parameter>
   <parameter name="transport.vfs.FileNamePattern">TITLES.xml</parameter>
   <parameter name="transport.vfs.ContentType">application/xml</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
   <description/>
</proxy>

序列

    <sequence xmlns="http://ws.apache.org/ns/synapse" name="MySequence">
   <log level="custom">
      <property name="sequence" value="MySequence"></property>
   </log>
   <property xmlns:ns="http://org.apache.synapse/xsd" name="filename" expression="get-property('transport', 'FILE_NAME')"></property>
   <log level="custom">
      <property xmlns:ns="http://org.apache.synapse/xsd" name="show-name" expression="get-property('filename')"></property>
      <property xmlns:ns="http://org.apache.synapse/xsd" name="file-name" expression="get-property('targetfilename')"></property>
   </log>
   <iterate xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" xmlns:z="RowsetSchema" expression="//z:row" id="It1">
      <target>
         <sequence>
            <property name="Id" expression="//z:row/@ID"></property>
            <property name="vch" expression="//z:row/@vch"></property>
            <log level="custom">
               <property name="showids" expression="get-property('Id')"></property>
               <property name="showvch" expression="get-property('vch')"></property>
            </log>
            <filter xpath="//z:row[starts-with(@vch, '978')]">
               <then>
                  <payloadFactory media-type="xml">
                     <format>
                        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p="http://ws.wso2.org/dataservice">
                           <soapenv:Body>
                              <p:insert_AR_operation>
                                 <p:ID xmlns:xs="http://ws.wso2.org/dataservice">$1</p:ID>
                                 <p:vch xmlns:xs="http://ws.wso2.org/dataservice">$2</p:vch>
                              </p:insert_AR_operation>
                           </soapenv:Body>
                        </soapenv:Envelope>
                     </format>
                     <args>
                        <arg expression="get-property('Id')" evaluator="xml"></arg>
                        <arg expression="get-property('vch')" evaluator="xml"></arg>
                     </args>
                  </payloadFactory>
                  <log level="custom">
                     <property name="sequence" value="Calling LevelsAR_ISBNService"></property>
                  </log>
                  <property name="HTTP_METHOD" value="POST" scope="axis2"></property>
                  <property name="SOAPAction" value="insert_AR_operation" scope="transport"></property>
                  <send>
                     <endpoint>
                        <address uri="http://*.*.*.*:****/services/AR_Service.HTTPEndpoint/"></address>
                     </endpoint>
                  </send>
               </then>
               <else>
                  <log level="custom">
                     <property name="sequence" value="Condition Drop"></property>
                  </log>
                  <drop></drop>
               </else>
            </filter>
         </sequence>
      </target>
   </iterate>
   <property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" expression="fn:concat(get-property('SYSTEM_DATE', 'yyMMddHHmmss'), '-', get-property('filename'))" scope="transport"></property>
   <property name="OUT_ONLY" value="true"></property>
</sequence>

0 个答案:

没有答案