骡子请求回复和回滚例外策略

时间:2015-11-18 02:08:55

标签: 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>

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

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

有人可以解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

如果您使用回滚异常策略而不是unhandled exceptions的默认异常策略,那么您只需在&#34; rollback-exception-strategy&#34;中手动指定重定向。通过添加&#34; vm:outbound-endpoint&#34;使用&#34;回复#34;路径,请注意maxRedeliveryAttempts已更改为&#34; 0&#34;因为你的虚拟机不是交易的:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


<center>
  <img src='lib/img/tinserlogo.png' style='margin-top: 60px; opacity: 0;' id='menulogo'>
</center>
<center>
  <div id='1' class='circle' style='background-color: #FF0000;'><font id='1a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>R</font>
  </div>
  <div id='2' class='circle' style='background-color: #FF9100; margin-left: 20px;'><font id='2a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>T</font>
  </div>
  <div id='3' class='circle' style='background-color: #FFE600; margin-left: 20px;'><font id='3a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>P</font>
  </div>
  <div id='4' class='circle' style='background-color: #37FF00; margin-left: 20px;'><font id='4a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>A</font>
  </div>
  <div id='5' class='circle' style='background-color: #00FFF3; margin-left: 20px;'><font id='5a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>L</font>
  </div>
  <div id='6' class='circle' style='background-color: #001AFF; margin-left: 20px;'><font id='6a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>P</font>
  </div>
  <div id='7' class='circle' style='background-color: #FF00F3; margin-left: 20px;'><font id='7a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>D</font>
  </div>
  <div id='8' class='circle' style='background-color: #000000; margin-left: 20px;'><font id='8a' style='font-size: 48px; font-family: Futura; color: #FFFFFF;'>C</font>
  </div>
</center>

当vm为transactional时,值maxRedeliveryAttempts = 5是有意义的,因为在这种情况下,Mule会尝试重新发送消息五(5)次。然后,您可以在&#34; rollback-exception-strategy&#34;中手动指定重定向。通过添加&#34; vm:outbound-endpoint&#34;使用&#34;回复#34; &#34; on-redelivery-attempts-exceeded&#34;子元素:

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