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

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

谁能解决这个问题?

最佳答案

如果您使用回滚异常策略而不是 unhandled exceptions 的默认异常策略,那么你只需要在“rollback-exception-strategy”中通过添加“vm:outbound-endpoint”和“reply”路径来手动指定重定向,请注意 maxRedeliveryAttempts 已更改为“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>

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

<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 请求回复和回滚异常策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33770617/

相关文章:

mule - Anypoint Studio 在每次更改 XML 或 java 后花费太长时间验证项目

java - 如何在 Mule 连接器中添加下拉列表项?

java - Mule 和 Java - 字节 [] 到文件

java - 集成 ESB(ServiceMix/Mule)是否值得学习曲线?

xml - 骡子 3.9.5 无法将 xml dom 转换为 xml

基于 Header 属性的 Mule 选择节点表达式

java - 使用java在MUnit中设置流变量

soap - 使用Mule 3.5.1 EE Web服务使用者组件时如何获取SOAP Fault xml?

mule - 为什么使用 Maven 构建 Mule Studio 3.4 失败或无限期挂起

exception - 为什么 Mule 异常(exception)策略这么啰嗦?