我正在尝试异常策略,并遇到以下配置:
如果我使用同步vm端点从另一个流调用一个流,并且没有在被调用流中捕获异常。调用者流异常策略不会被调用,而是被调用者流添加一个exceptionPayload。
我假设如果有一个exceptionPayload,调用者流异常策略将被调用。但事实并非如此。这是一个特性还是一个bug?
<flow name="main" doc:name="main">
<poll frequency="60000">
<set-payload value="main"></set-payload>
</poll>
<vm:outbound-endpoint address="vm://private" exchange-pattern="request-response" />
<logger level="ERROR" message="After private #[exception]" />
<catch-exception-strategy>
<logger level="ERROR" message="Exception caught in parent." />
</catch-exception-strategy>
</flow>
<flow name="private">
<vm:inbound-endpoint address="vm://private" exchange-pattern="request-response" />
<logger level="ERROR" message="private" />
<null-component></null-component>
</flow>
我也可以通过MEL使用#[exception]而不是通过#[message.exceptionPayload]访问exceptionPayload。在Mule中不能以这种方式访问它有什么原因吗?我可以在defaultmullemessage上看到它
Mule是一个面向消息的平台,因此,根据设计,异常包含在流(而不是子流)中,并作为特定的消息有效负载传播。
MEL在上下文对象上工作:这里是MessageContext对象API,如您所见,没有exceptionPayload
字段。