【问题标题】:WSO2 ESB concurrent thread vfs-workerWSO2 ESB 并发线程 vfs-worker
【发布时间】:2013-03-30 10:21:58
【问题描述】:

我是 WSO2 和 Apache Synapse 的新手。我创建了一个代理服务来将一些文件路由到另一个文件夹,但是当我查看 JConsole 时,只有 1 个线程在工作。

如何配置设置以使多个线程同时工作并处理同一个源文件夹?我这样配置线程池:

-Dsnd_t_core=3 \
-Dsnd_t_max=5000 \
-Dsnd_qlen=-1 \

我的代理服务看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://ws.apache.org/ns/synapse">
   <registry provider="org.wso2.carbon.mediation.registry.WSO2Registry">
      <parameter name="cachableDuration">15000</parameter>
   </registry>
   <proxy name="Service1"
          transports="vfs"
          startOnLoad="true"
          trace="enable"
          statistics="enable">
      <description/>
      <target>
         <inSequence>
            <log level="custom">
               <property name="Message" value="Routing start"/>
               <property name="filename"
                         expression="fn:concat(get-property('transport', 'FILE_NAME'), '.xml')"/>
            </log>
         </inSequence>
         <outSequence>
            <property name="OUT_ONLY" value="true"/>
         </outSequence>
      </target>
      <parameter name="transport.vfs.Streaming">false</parameter>
      <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
      <parameter name="transport.PollInterval">1</parameter>
      <parameter name="transport.vfs.FileURI">file:///home/user/test/target2</parameter>
      <parameter name="transport.vfs.MoveAfterProcess">file:///home/user/test/target</parameter>
      <parameter name="transport.vfs.MoveAfterFailure">file:///home/user/test/failure</parameter>
      <parameter name="transport.vfs.Locking">disable</parameter>
      <parameter name="transport.vfs.FileNamePattern">.*.*</parameter>
      <parameter name="transport.vfs.ContentType">text/plain</parameter>
      <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
   </proxy>
   <sequence name="fault">
      <log>
         <property name="MESSAGE" value="Executing default &#34;fault&#34; sequence"/>
         <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
         <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
      </log>
      <drop/>
   </sequence>
   <sequence name="main">
      <in>
         <filter source="get-property('To')" regex="http://localhost:9000.*">
            <send/>
         </filter>
      </in>
      <out>
         <send/>
      </out>
      <description>The main sequence for the message mediation</description>
   </sequence>
</definitions>

【问题讨论】:

    标签: apache wso2 wso2esb synapse apache-commons-vfs


    【解决方案1】:

    我从您的问题中了解到您正在尝试做的是并行提供相同的消息并将它们存储在并行执行的文件中。

    如果是这样,实现此目的的方法是使用克隆中介。克隆中介会将消息拆分为多个相同的消息,这些消息将并行处理

    您可以通过 [1] 参考克隆中介文档。

    根据您的场景,您可以使用 iterate mediator 根据您的 parant 消息中的文件名进行迭代,iterate mediator 上的示例可以在 [2] 中找到,并且可以在 [3] 上找到示例

    [1]。 http://docs.wso2.org/wiki/display/ESB460/Clone+Mediator

    [2].http://docs.wso2.org/wiki/display/ESB460/Sample+400%3A+Message+Splitting+and+Aggregating+the+Responses

    [3].http://docs.wso2.org/wiki/display/ESB460/Iterate+Mediator

    谢谢你, 达沙那。

    【讨论】:

    • 感谢您的回答。我的情况是我在一个文件夹中有数千个文件,我想将这些文件路由到另一个文件夹。但我从 jConsole 发现只有 1 个 vfs-worker 处理我的服务。如何使服务由多个线程处理? WSO2 可以支持使用 ThreadPool 吗?
    • 我也有类似的情况,不知道苹果上面的答案如何。有关此用例的任何更多信息都会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多