0

如何从 mule 中的 catch-exception-strategy 重新抛出异常。

尝试使用以下流程并在“flowdemo”错误处理出现异常后,它不会进入 mdemoflow 的错误处理。它执行位于 flow-ref 之后的记录器。

<mule  ....>
    <sub-flow name="exceFlow">
        <logger level="ERROR" doc:name="Logger"/>
        <expression-component doc:name="Expression"><![CDATA[throw new java.lang.IllegalArgumentException('bad arg');]]></expression-component>
        <validation:is-true expression="false" doc:name="Validation"/>
        <scripting:component doc:name="Script">
            <scripting:script engine="Groovy"><![CDATA[throw new java.lang.IllegalArgumentException('bad arg')]]></scripting:script>
        </scripting:component>
        <logger level="INFO" doc:name="Logger"/>
    </sub-flow>
    <flow name="flowdemo" processingStrategy="synchronous">
        <expression-component doc:name="Expression"><![CDATA[flowVars.dummy = flowVars.fake.test]]></expression-component>
        <catch-exception-strategy doc:name="Catch Exception Strategy"  >
            <flow-ref name="exceFlow" doc:name="Flow Reference"/>
        </catch-exception-strategy>
    </flow>
    <flow name="mdemoFlow" processingStrategy="synchronous">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="3" timeUnit="MINUTES"/>
            <logger level="INFO" doc:name="Logger"/>
        </poll>
        <flow-ref name="flowdemo" doc:name="flowdemo"/>
        <logger level="INFO" doc:name="Logger"/>
        <catch-exception-strategy doc:name="Catch Exception Strategy">
            <logger message="test logging in error" level="ERROR" doc:name="Logger"/>
            <logger level="INFO" doc:name="Logger"/>
        </catch-exception-strategy>
    </flow>
</mule>
4

1 回答 1

0

flowdemo 是流(不是子流)并且有自己的 catch 异常策略(所以它由演示流本身处理)。线程从通过 flowRef 调用其他流的主流(mdemoFlow)开始,因此它返回到主流以完成预期的线程(与流处理策略无关)。如果您想处理主要流程本身中的所有异常。请使用以下配置(将 flowdemo 设置为子流),因此默认情况下,在其关联的子流中发生的任何异常都将返回其主流进行处理。

   <sub-flow name="flowdemo" >
    <expression-component doc:name="Expression"><![CDATA[flowVars.dummy = flowVars.fake.test]]></expression-component>
</sub-flow>
<flow name="mdemoFlow" processingStrategy="synchronous">
    <poll doc:name="Poll">
        <fixed-frequency-scheduler frequency="3" timeUnit="MINUTES"/>
        <logger level="INFO" doc:name="Logger"/>
    </poll>
    <flow-ref name="flowdemo" doc:name="flowdemo"/>
    <logger level="INFO" doc:name="Logger" message="***final logger***"/>
    <catch-exception-strategy doc:name="Catch Exception Strategy">
        <logger message="test logging in error" level="ERROR" doc:name="Logger"/>
        <logger level="INFO" doc:name="Logger"/>
        <flow-ref name="exceFlow" doc:name="Flow Reference"/>
    </catch-exception-strategy>
</flow>
<sub-flow name="exceFlow">
    <logger level="ERROR" doc:name="Logger"/>
    <logger level="INFO" doc:name="Logger"/>
</sub-flow>

使异常策略成为全球性的。您可以使用全局异常策略并通过引用异常策略调用相同的策略。有关详细信息,请参阅链接https://docs.mulesoft.com/mule-user-guide/v/3.7/reference-exception-strategy

于 2016-05-31T22:07:15.127 回答