异常负载从一个流传递到由Vm端点连接的另一个流



嗨,我有一个包含flow1的mflow文件,其中Vm入站端点保持。通过这个vm端点,我正在连接在同一项目的另一个mflow文件中存在的其他flow2。在flow2中抛出了一个异常,我需要在flow1中捕获它。我可以看到flow1中的异常有效载荷来自flow2。但是flow1不将其识别为异常,并将其传递给流的其他组件,而不是将其发送到catch块。帮我解决这个问题。我需要抓住它的主要流程,即流程1。并行流将与此流一起运行,我将聚合两个响应。如果其中一个流抛出异常,它不应该影响另一个并行流的执行。

调用流不会捕获异常,因为异常不会跨端点传播。

您可以将流2更改为子流或私有流(没有定义异常策略)并删除vm-endpoint。这样,流程1将捕获并处理异常。

    <flow name="flow1">
        <flow-ref name="flow2" />       
        <catch-exception-strategy>
            <logger level="ERROR" message="Caught exception in flow1" />
        </catch-exception-strategy>
    </flow>
    <sub-flow name="flow2">
    ...
    </sub-flow>

或者你也可以使用过滤器或选择路由器来过滤异常。

    <flow name="flow1">
        ...
        <vm:outbound-endpoint exchange-pattern="request-response" address="vm://flow2" />
        <choice>
            <when expression="#[exception != null]">
                <logger level="ERROR" message="exception in flow2" />
            </when>
            <otherwise>
                <logger />
            </otherwise>
        </choice>
    </flow>
    <flow name="flow2">
        <vm:inbound-endpoint exchange-pattern="request-response" address="vm://flow2" />
        <null-component></null-component>
    </flow>

最新更新