<sub-flow name="SendToEMC">
<until-successful objectStore-ref="objectStore" maxRetries="${MaximumRetry}" secondsBetweenRetries="${RetryInterval}">
<http:outbound-endpoint address="${EMCURL}" exchange-pattern="one-way">
<transformer ref="contentTypeTextXML"/>
</http:outbound-endpoint>
</until-successful>
</sub-flow>
<expression-component>app.registry.messageBean.messageProcessedSuccessfully(flowVars.id)</expression-component>
我需要在直到成功标记之后执行表达式组件,只有它实际上成功了!但是当我尝试使用Synchronous = true时,直到成功我得到了这个错误:
直到成功无法配置为同步并使用 对象商店。
我尝试使用下面的工作,但似乎不起作用:
<sub-flow name="SendToEMC">
<until-successful objectStore-ref="objectStore" maxRetries="${MaximumRetry}" secondsBetweenRetries="${RetryInterval}">
<processor-chain>
<http:outbound-endpoint address="${EMCURL}" exchange-pattern="one-way">
<transformer ref="contentTypeTextXML"/>
</http:outbound-endpoint>
<expression-component>app.registry.messageBean.messageProcessedSuccessfully(flowVars.id)</expression-component>
</processor-chain>
</until-successful>
</sub-flow>
我做错了什么?我怎么能实现这个目标?
谢谢
答案 0 :(得分:1)
ObjectStore连接器的好方案!首先对你的例子进行一些观察,以澄清一些事情,因为Anypoint 3.5和3.6中的语法和组件已经改变。
objectStore-ref
&amp; synchronous=true
的{{1}}属性互斥。这意味着如果您希望<until-succesful>
同步,则无法使用<until-succesful>
的内置对象存储功能。<until-succesful>
组件已弃用。您应该使用<processor-chain>
来呼叫<flow-ref>
或<sub-flow>
。您可以通过设置为同步,然后在对象库中手动设置和检索值来实现所需的功能。你必须采取一些步骤来使用对象存储,我将在下面介绍。这是使用Anypoint 3.6。
<flow>
)。如果您在ESB上使用默认内存或者要部署到CloudHub,则无需执行此步骤。根据文档,CloudHub使用org.mule.util.store.SimpleMemoryObjectStore
并且ObjectStore连接器默认为ESB上的内存中对象存储。 :)示例配置完成所有这些:
_defaultUserObjectStore
答案 1 :(得分:0)
直到成功范围的同步性并不接受对象存储,对象存储配置具有直到成功范围的异步性质。
将有效负载保存在flow-variable中,在untill-successfull作用域和untill-successful作用域之前使用set-payload组件,并将flowvariable数据中的值设置为直到成功范围的第一个消息进程。 / p>
它将起作用,我们明确保存数据并为每次重试成功范围分配有效负载。 让我知道你尝试的状态。
答案 2 :(得分:0)
如果您没有使用OBJECT STORE REF,请使用线程作为 - 同步。
如果您正在使用可列表对象存储ref,那么直到成功使用Async。