如何使用Mule对象存储将值从第一个触发器持久存储到第二个触发器

时间:2015-10-16 04:04:33

标签: mule mule-studio mule-component mule-el

我需要计算输入流量的消息数量。一旦达到100,我需要做一些过程。我正在对此进行简单的POC,但是在这个概念之间徘徊。

开始流程,初始化object store1并递增脚本1+1= 2中的值,并将增量值分配给与我们相同的object store覆盖选项。当第二条消息被触发时,我期待objectstore将vales称为2,这样我就可以增加到3.但问题是,当第二条消息进来时,对象存储分配再次值为'1'。

如果我删除第一个对象存储中的覆盖属性选项,则当第二个消息开始触发流时,它会抛出类似于密钥的错误。

我需要做的是,我需要在第二条消息触发时存储增量值。

如果任何代码段有用,请任何人都建议解决方案。请找到简单的我的配置xml

<objectstore:config name="ObjectStore" maxEntries="100" persistent="true" doc:name="ObjectStore"/>
<flow name="OB test flow" processingStrategy="thread-per-processor">
    <file:inbound-endpoint path="C:\in" responseTimeout="10000" doc:name="File"/>
    <objectstore:store config-ref="ObjectStore" key="OB1" value-ref="#[&quot;1&quot;]" overwrite="true" doc:name="ObjectStore"/>
    <enricher target="#[flowVars.initialValue]" doc:name="Message Enricher">
        <objectstore:retrieve config-ref="ObjectStore" key="OB1" doc:name="ObjectStore"/>
    </enricher>
    <scripting:component doc:name="Script">
        <scripting:script engine="Groovy"><![CDATA[String storePayload =  message.payload;
      String storeInitialValue= flowVars.initialValue;
    int pValue = Integer.parseInt(storeInitialValue);
    int i = 0;
     if ( i < pValue ){
     pValue=pValue+1;
   flowVars.initialValue=pValue;
  return storePayload;
   }
  ]]></scripting:script>
    </scripting:component>
    <objectstore:store config-ref="ObjectStore" key="OB1" value-ref="# [flowVars.initialValue]" overwrite="true" doc:name="ObjectStore"/>
    <enricher target="#[flowVars.finalValue]" doc:name="Message Enricher">
        <objectstore:retrieve config-ref="ObjectStore" key="OB1" doc:name="ObjectStore"/>
    </enricher>
    <logger message="***FinalValue:#[flowVars.finalValue]" level="INFO" doc:name="Logger"/>
    <file:outbound-endpoint path="c:/out" responseTimeout="10000" doc:name="File"/>
</flow>

1 个答案:

答案 0 :(得分:1)

因为你总是在这里覆盖它:

<objectstore:store config-ref="ObjectStore" key="OB1" value-ref="#[&quot;1&quot;]" overwrite="true" doc:name="ObjectStore"/>

首先尝试检索它:然后检查并覆盖它:

<enricher target="#[flowVars.initialValue]" doc:name="Message Enricher">
            <objectstore:retrieve config-ref="ObjectStore"
                key="OB1" doc:name="ObjectStore" defaultValue-ref="#[1]" />
        </enricher>

        <set-variable variableName="newValue"
            value="#[flowVars.initialValue !=null ? flowVars.initialValue + 1 : 1]"
            doc:name="Variable" />
        <objectstore:store config-ref="ObjectStore" key="OB1"
            value-ref="#[flowVars.newValue]" overwrite="true" doc:name="ObjectStore" />