Exception Mule请求-响应虚拟机的回滚异常策略

Exception Mule请求-响应虚拟机的回滚异常策略,exception,jms,mule,rollback,Exception,Jms,Mule,Rollback,我正在使用mule请求-响应VM,需要VM重新处理回滚消息,以防出现一些异常,比如连接问题。然而,当我使用exchange模式作为VM的请求-响应时,回滚异常策略似乎不起作用。我使用request-response的原因是我需要知道我的所有VM消息何时被处理,然后启动另一个任务。我认为这种行为是当出现异常时,回滚策略捕获异常并可能提交它。我没有看到它尝试将消息重新传递回VM。当交换模式是单向的时,它确实工作得很好 <flow name="vmtransactionrollback

我正在使用mule请求-响应VM,需要VM重新处理回滚消息,以防出现一些异常,比如连接问题。然而,当我使用exchange模式作为VM的请求-响应时,回滚异常策略似乎不起作用。我使用request-response的原因是我需要知道我的所有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>

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

因此,如果虚拟机配置为单向,并且流处理策略是同步的(虚拟机入站流),那么重新交付就开始了

为了实现您想要的,您可以在vmtransactionrollbackFlow1流中使用scope,特别是对于间歇性连接丢失的情况,这实际上是推荐的方法。在其中,您根本不需要事务


一定要让我们知道它是如何进行的,如果您找到了其他解决方法。

感谢您的响应,但是请求-答复似乎无法应用于事务性虚拟机。所以,这对我的情况没有用,我需要一个回退。对于最初误导你的道歉,更新了我的答案。再次感谢。在这种情况下,它似乎工作正常,但是,我确实在日志中看到以下内容。INFO 2015-06-05 10:23:39499[[CDS-O]。刷新项目流。stage1.02]org.mule.routing.SynchronousUntiltSuccessfulProcessingStrategy:在成功执行表达式“Exception.causedBy(…)”失败之前,内部抛出异常。顺便说一句,我正在尝试将失败表达式设置为#[exception.causedBy(java.net.SocketException)…]”。你发布了新问题吗?我所要做的就是在我的失败表达式中放入一个空检查——“exception=null&&exception.causedBy(..)“[链接]()