在通过路由时无法访问flowVars(MEL),直到Mule ESB中的消息处理器成功
嗨,我是第一次来mule开发mule项目,请帮助我。在我的主流程中,我在捕获原始有效负载的地方设置了varaible,顺便说一句,如果某个服务出现故障或其他情况,我必须调用该服务,它必须重试3次(直到成功为止)。当它呼出时,它必须通过第二流。无论故障是什么,它都应该在第二个流中将原始有效负载记录到队列中。所以我试图在setpayload处理器中访问flowVars。但我得到了这样的错误- [错误:无法访问:originalPayload;类中:org.mule.el.context.MessagePropertyMapContext] [近:{…flowVars.originalPayload….}]。请找到我的xml配置在通过路由时无法访问flowVars(MEL),直到Mule ESB中的消息处理器成功,mule,mule-studio,mule-el,Mule,Mule Studio,Mule El,嗨,我是第一次来mule开发mule项目,请帮助我。在我的主流程中,我在捕获原始有效负载的地方设置了varaible,顺便说一句,如果某个服务出现故障或其他情况,我必须调用该服务,它必须重试3次(直到成功为止)。当它呼出时,它必须通过第二流。无论故障是什么,它都应该在第二个流中将原始有效负载记录到队列中。所以我试图在setpayload处理器中访问flowVars。但我得到了这样的错误- [错误:无法访问:originalPayload;类中:org.mule.el.context.Messag
<spring:beans>
<spring:bean id="objectStore" class="org.mule.util.store.SimpleMemoryObjectStore"></spring:bean>
</spring:beans>
<vm:endpoint exchange-pattern="one-way" path="path" name="VM" doc:name="VM"></vm:endpoint>
<flow name="Flow1" doc:name="Flow1">
<file:inbound-endpoint path="C:\Users\Star Jothi\Desktop\Mule\FilePath1" responseTimeout="10000" doc:name="File"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"></byte-array-to-string-transformer>
<set-variable variableName="originalPayload" value="#[payload]" doc:name="Variable"/>
<set-payload value="#['hi']" doc:name="Set Payload"/>
<flow-ref name="Flow2" doc:name="Flow Reference"/>
</flow>
<flow name="Flow2" doc:name="Flow2">
<cxf:proxy-client payload="body" enableMuleSoapHeaders="true" doc:name="SOAP"/>
<until-successful objectStore-ref="objectStore" maxRetries="2" secondsBetweenRetries="2" deadLetterQueue-ref="VM" doc:name="Until Successful">
<http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="test" method="POST" doc:name="HTTP"/>
</until-successful>
</flow>
<flow name="Flow3" doc:name="Flow3">
<vm:inbound-endpoint exchange-pattern="one-way" path="path" doc:name="VM"></vm:inbound-endpoint> -->
<set-payload value="#[flowVars.originalPayload]" doc:name="Set Payload"></set-payload>
<logger message="****#[payload]******" level="INFO" doc:name="Logger"></logger>
</flow>
-->
请建议我如何访问flowVars并在使用时获取原始有效负载,直到成功使用处理器。第一点:
flowVars are accessd in the flow by using #[flowVars['originalPayload']]
第二点:
flowVars are lost from the Mule Message when the message crosses an endpoint.
第三点:
Until Successful is Asynchronous. So irrespective of the success of Until-Successful and HTTP outbound in First flow the Flow2 is going to get executed.
在您的场景中,您可以在第一个成功的路由器中使用HTTP出站和Flow2组合
注意:首次成功将不会重试
希望这能有所帮助。为什么在
之后有一个flow ref
,直到成功
:您不想只在失败的情况下调用Flow2
?另外,在Flow2
中,使用全局声明的VM端点,而不是重新声明它:`@DavidDossot-因为我的流非常大,所以我简化了它。现在请找到我编辑的流程。我已经声明,作为会话变量,它工作正常。但反过来,正如您所建议的,如果我继续在流程3中获取运行时错误,如“发现以元素'vm:endpoint'开头的无效内容”。请建议。@Seba-我正在使用mule版本3.4是的,它很有用。谢谢。通过声明为会话变量,它可以正常工作。