m子:在mule 3.5中的MEL中检索对象存储



是否需要测试对象存储的要求,无论是否包含键是否在选择路由器中

<objectstore:config name="storeDownload" doc:name="ObjectStore" persistent="false" partition="test"/>
      <choice>
         <when  expression="#[app.registry.storeDownload.contains('#[flowVars.startKey]').equals('false')]">

获取错误1.表达式评估器"注册表"带有" extress"上的"返回" null,但需要一个值。(org.mule.api.expression.expressionruntimeException) org.mule.expression.RegistryExpressionEvaluator:101(http://www.mulesoft.org/docs/site/site/current3/apidocs/org/mule/mule/mule/api/api/api/expression/expression/expression/expressionruntimeRuntimeException.html)2.无法调用商店。消息有效负载是类型:字节[](org.mule.api.messagingException)

主要问题是您将MEL嵌入了MEL中,而Mel无法正常工作。

也是狡猾的布尔值比较。

替换此:

#[app.registry.storeDownload.contains('#[flowVars.startKey]').equals('false')]

与此:

#[!(app.registry.storeDownload.contains(flowVars.startKey))]

我的用例与纳扎尔的用例有所不同,我需要监视长期运行过程,该过程可能需要四个小时。

在第一个流中,我在有效载荷中生成一个带有时间戳的键值,然后使用它将processState设置为静态值,如下所示。之后,我以四个小时的延迟点火了石英站出终点。

<objectstore:store config-ref="MonitoredProcess" value-ref="Started" key="#[payload]" doc:name="ObjectStore"/>
<quartz:outbound-endpoint jobName="ProcessMonitor"  responseTimeout="10000" doc:name="Quartz"
    repeatInterval="0" repeatCount="0" startDelay="${process.monitor.event.start.delay}">
    <quartz:scheduled-dispatch-job>
        <quartz:job-endpoint address="vm://processMonitorQueue"/>
    </quartz:scheduled-dispatch-job>
</quartz:outbound-endpoint>

我得到了同样的例外。

在刮擦我的头并进行了大量搜索后,将变量"值 - ref>"的名称与上面的大卫答案结合在一起,最终揭示了我的问题,即梅尔总是被调用的 ref字段。

一旦我将字段更改为表达式#['start'],梅尔可以评估我的问题就消失了。

<objectstore:store config-ref="MonitoredProcess" value-ref="#['Started']" key="#[payload]" doc:name="ObjectStore"/>

为了完整性,我包含了从对象存储中检索ProcessState的代码。注意DefaultValue- Ref 还需要使用MEL

<vm:inbound-endpoint exchange-pattern="one-way" path="processMonitorQueue" doc:name="VM" />
<objectstore:retrieve config-ref="MonitoredProcess" defaultValue-ref="#['DoesNotExist']" key="#[payload]" targetProperty="processState" doc:name="ObjectStore"/>

最新更新