我需要计算输入流量的消息数量。一旦达到100,我需要做一些过程。我正在对此进行简单的POC,但是在这个概念之间徘徊。
开始流程,初始化object store
值1
并递增脚本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="#["1"]" 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>
答案 0 :(得分:1)
因为你总是在这里覆盖它:
<objectstore:store config-ref="ObjectStore" key="OB1" value-ref="#["1"]" 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" />