Mule请求回复和回滚异常策略

Mule请求回复和回滚异常策略,mule,Mule,我有一个mule流,在这里我配置了请求-应答范围。流程如下所示: <flow name="RequestReplyFlow"> <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP" /> <set-payload value="#['Sample Payload']" doc:name="Set Payload" /> &

我有一个mule流,在这里我配置了请求-应答范围。流程如下所示:

<flow name="RequestReplyFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP" />
    <set-payload value="#['Sample Payload']" doc:name="Set Payload" />
    <request-reply doc:name="Request-Reply">
        <vm:outbound-endpoint exchange-pattern="one-way" path="request" doc:name="VM" />
        <vm:inbound-endpoint exchange-pattern="one-way" path="reply" doc:name="VM" />
    </request-reply>
</flow>


我在
请求
VM入站端点上配置
回滚异常策略

当组件org.ram.BusinessComponent抛出异常时,我所期望的是消息被重新传递到入站VM端点,但它没有发生。为什么?


有人能解决这个问题吗?

如果您使用的是回滚异常策略而不是默认的异常策略,那么您只需在“回滚异常策略”中手动指定重定向,方法是添加带有“回复”路径的“vm:出站端点”,注意MaxRedeliveryAttentits已更改为“0”因为您的vm不是事务性的:

<flow name="RequestReplyFlow1">
    <vm:inbound-endpoint exchange-pattern="one-way" path="request" doc:name="VM" />
    <logger message="Executing with payload: #[payload]" level="INFO" doc:name="Logger" />
    <component class="org.ram.BusinessComponent" doc:name="Java" />
    <rollback-exception-strategy maxRedeliveryAttempts="0" doc:name="Rollback Exception Strategy">
        <logger message="Will attempt redelivery" level="INFO" doc:name="Logger" />
        <vm:outbound-endpoint exchange-pattern="one-way" path="reply" doc:name="VM" />
    </rollback-exception-strategy>
</flow>

当vm为时,值maxredeliveryattens=5是有意义的,因为在这种情况下,Mule尝试消息重新传递五(5)次。然后,您可以在“回滚异常策略”中手动指定重定向,方法是添加“vm:outbound endpoint”,并在“超过重新交付尝试次数”子元素中添加“reply”路径:

<flow name="RequestReplyFlow1">
    <vm:inbound-endpoint exchange-pattern="one-way" path="request" doc:name="VM" />
    <logger message="Executing with payload: #[payload]" level="INFO" doc:name="Logger" />
    <component class="org.ram.BusinessComponent" doc:name="Java" />
    <rollback-exception-strategy maxRedeliveryAttempts="0" doc:name="Rollback Exception Strategy">
        <logger message="Will attempt redelivery" level="INFO" doc:name="Logger" />
        <on-redelivery-attempts-exceeded>
            <logger message="redelivery attempt exceeded" level="INFO" doc:name="Logger" />
            <vm:outbound-endpoint exchange-pattern="one-way" path="reply" doc:name="VM" />
        </on-redelivery-attempts-exceeded>
    </rollback-exception-strategy>
</flow>

<flow name="RequestReplyFlow1">
    <vm:inbound-endpoint exchange-pattern="one-way" path="request" doc:name="VM" />
    <logger message="Executing with payload: #[payload]" level="INFO" doc:name="Logger" />
    <component class="org.ram.BusinessComponent" doc:name="Java" />
    <rollback-exception-strategy maxRedeliveryAttempts="0" doc:name="Rollback Exception Strategy">
        <logger message="Will attempt redelivery" level="INFO" doc:name="Logger" />
        <on-redelivery-attempts-exceeded>
            <logger message="redelivery attempt exceeded" level="INFO" doc:name="Logger" />
            <vm:outbound-endpoint exchange-pattern="one-way" path="reply" doc:name="VM" />
        </on-redelivery-attempts-exceeded>
    </rollback-exception-strategy>
</flow>