在定义objectStore时,如何使用Mule 3.6实现同步直到成功?

时间:2015-02-22 15:15:16

标签: java mule esb

<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>

我做错了什么?我怎么能实现这个目标?

谢谢

3 个答案:

答案 0 :(得分:1)

ObjectStore连接器的好方案!首先对你的例子进行一些观察,以澄清一些事情,因为Anypoint 3.5和3.6中的语法和组件已经改变。

  • 如@Mohan所述,objectStore-ref&amp; synchronous=true的{​​{1}}属性互斥。这意味着如果您希望<until-succesful>同步,则无法使用<until-succesful>的内置对象存储功能。
  • <until-succesful>组件已弃用。您应该使用<processor-chain>来呼叫<flow-ref><sub-flow>

您可以通过设置为同步,然后在对象库中手动设置和检索值来实现所需的功能。你必须采取一些步骤来使用对象存储,我将在下面介绍。这是使用Anypoint 3.6。

  1. 在Anypoint Studio中安装对象存储模块。它被称为Mule对象存储模块Mule Studio扩展,位于Anypoint连接器更新站点下。有关详细信息,请参阅thisthis
  2. 在“全局元素”选项卡上,使用所需对象库类型的类创建Bean(例如:<flow>)。如果您在ESB上使用默认内存或者要部署到CloudHub,则无需执行此步骤。根据文档,CloudHub使用org.mule.util.store.SimpleMemoryObjectStore并且ObjectStore连接器默认为ESB上的内存中对象存储。 :)
  3. 在“全局元素”选项卡上,创建一个ObjectStore连接器配置。所有字段都是可选字段,并将恢复为所述的默认值。如果要指定特定的对象库,请将对象库Bean ID放入“对象库参考”字段中。
  4. 一旦掌握了所有这些,那么您实际上可以使用对象存储。使用ObjectStore连接器并将其放入需要它们存储和检索值的流中。请参阅Object Store Module reference
  5. 示例配置完成所有这些:

    _defaultUserObjectStore

答案 1 :(得分:0)

直到成功范围的同步性并不接受对象存储,对象存储配置具有直到成功范围的异步性质。

将有效负载保存在flow-variable中,在untill-successfull作用域和untill-successful作用域之前使用set-payload组件,并将flowvariable数据中的值设置为直到成功范围的第一个消息进程。 / p>

它将起作用,我们明确保存数据并为每次重试成功范围分配有效负载。 让我知道你尝试的状态。

答案 2 :(得分:0)

如果您没有使用OBJECT STORE REF,请使用线程作为 - 同步。

如果您正在使用可列表对象存储ref,那么直到成功使用Async。