Mule请求回复和回滚异常策略 [英] Mule Request Reply and Rollback Exception Strategy

查看:59
本文介绍了Mule请求回复和回滚异常策略的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ule子流程,在其中配置了请求答复"范围.流程如下:

I've a mule flow where I configured Request Reply scope. The flow is like below:

<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>

<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="5" doc:name="Rollback Exception Strategy">
        <logger message="Will attempt redelivery" level="INFO" doc:name="Logger" />
    </rollback-exception-strategy>
</flow>

我在request VM入站端点上配置rollback-exception-strategy.

I configure rollback-exception-strategy on the request VM inbound endpoint.

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

When the component org.ram.BusinessComponent throws an exception, what I expected is the message is redelivered to the inbound VM endpoint but it did not happen. Why?

任何人都可以解决这个问题吗?

Can anyone please solve the issue?

推荐答案

如果您对

If you are using rollback exception strategy instead of default exception strategy for unhandled exceptions, then you just have to specify the redirection manually in the "rollback-exception-strategy" by adding the "vm:outbound-endpoint" with the "reply" path, note that the maxRedeliveryAttempts was changed to "0" because your vm is not transactional:

<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>

当虚拟机为 transactional ,那么值maxRedeliveryAttempts = 5是有意义的,因为在这种情况下,Mule尝试重新发送消息五(5)次.然后,您可以在"rollback-exception-strategy"中手动指定重定向,方法是在"on-redelivery-attempts-exceeded"子元素内添加"vm:outbound-endpoint"和"reply"路径:

When the vm is transactional then the value maxRedeliveryAttempts=5 makes sense because in that case Mule attempts message redelivery five (5) times. Then you can specify the redirection manually in the "rollback-exception-strategy" by adding the "vm:outbound-endpoint" with the "reply" path inside the "on-redelivery-attempts-exceeded" child element:

<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>

这篇关于Mule请求回复和回滚异常策略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆