回滚Mule请求响应VM的异常策略

时间:2015-04-24 14:21:35

标签: exception jms mule rollback

我正在使用mule请求响应VM,并且在出现一些例外情况时需要VM重新处理回滚消息,比如连接问题。但是,当我使用交换模式作为VM的请求响应时,回滚异常策略似乎不起作用。我使用请求响应的原因是我需要知道何时处理了所有VM消息并在此之后启动另一个任务。我认为行为是当有异常时,回滚策略捕获异常并可能提交它。我没有看到它尝试将重新传递回VM的消息。当交换模式是单向的时,它确实有效。

     <flow name="vmtransactionrollbackFlow">
            <http:listener config-ref="HTTP_Listener_Configuration" path="/myvm" doc:name="HTTP"/>
             <set-payload value="Dummy list payload" doc:name="Set Payload"/>
            <foreach doc:name="For Each">
            <vm:outbound-endpoint exchange-pattern="request-response" path="myvm" connector-ref="VM" doc:name="VM">
                <vm:transaction action="ALWAYS_BEGIN"/>
            </vm:outbound-endpoint>
            </foreach>
            <logger message="DO SOMETHING ONLY AFTER ALL MESSAGES IN VM ARE PROCESSED" level="INFO" doc:name="Logger"/>
            </flow>
        <flow name="vmtransactionrollbackFlow1">
            <vm:inbound-endpoint exchange-pattern="request-response" path="myvm" connector-ref="VM" doc:name="VM">
                <vm:transaction action="BEGIN_OR_JOIN"/>
            </vm:inbound-endpoint>
             <scripting:component doc:name="Groovy">
                <scripting:script engine="Groovy"><![CDATA[throw new java.lang.Exception("Test exception");]]></scripting:script>
            </scripting:component>
               <rollback-exception-strategy maxRedeliveryAttempts="3" doc:name="Rollback Exception Strategy">
                <logger message="Rolling back #[payload]" level="INFO" doc:name="Logger"/>
                <on-redelivery-attempts-exceeded>
                    <logger message="Redelivery exhausted:#[payload]" level="INFO" doc:name="Logger"/>
                </on-redelivery-attempts-exceeded>
            </rollback-exception-strategy>
        </flow>

1 个答案:

答案 0 :(得分:2)

是的我遇到了类似的问题,当VM出站使用请求 - 响应交换模式时,它的行为更像flow-ref,每个说都没有“队列”,因此没有重新传递机制。

因此,如果将VM配置为单向并且流处理策略是同步的(VM入站流),那么重新传递确实会启动。

要实现您想要的功能,您可以在vmtransactionrollbackFlow1流程中使用until-successful范围,特别是对于间歇性连接丢失的情况,这实际上是推荐的方法。其中您根本不需要交易。

让我们知道它是怎么回事,如果你找到了其他的工作。