具有回滚异常策略的Mule ESB简单http请求

时间:2015-03-02 14:25:24

标签: http mule esb rollback

我正在尝试执行以下操作:

  1. 调用不存在的api
  2. 尝试重新发送原始请求5次
  3. 发货耗尽时打印消息
  4. 我有以下流程:

    <http:request-config name="HTTP_Request_Configuration" host="localhost" port="80" doc:name="HTTP Request Configuration"/>
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
    <flow name="exceptionTestFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
        <flow-ref name="exceptionTestSubFlow" doc:name="Flow Reference"/>
    </flow>
    <flow name="exceptionTestSubFlow">
        <http:request config-ref="HTTP_Request_Configuration" path="/hello/" method="GET" doc:name="HTTP"/>
        <rollback-exception-strategy doc:name="Rollback Exception Strategy" maxRedeliveryAttempts="5">
            <logger message="redelivering..." level="INFO" doc:name="Logger"/>
            <on-redelivery-attempts-exceeded>
                <logger message="redelivery exhausted" level="INFO" doc:name="Logger"/>
            </on-redelivery-attempts-exceeded>
        </rollback-exception-strategy>
    </flow>
    

    但我得到以下输出:

      

    ERROR 2015-03-02 14:15:34,820 [[exceptiontest] .HTTP_Listener_Configuration.worker.01] org.mule.exception.RollbackMessagingExceptionStrategy:

         
         

    消息:响应代码404映射为失败。消息有效内容的类型为:BufferInputStream

         

    代码:MULE_ERROR - 2

         

    异常堆栈是:   1.响应代码404映射为失败。消息有效内容的类型为:BufferInputStream(org.mule.module.http.internal.request.ResponseValidatorException)

         

    org.mule.module.http.internal.request.SuccessStatusCodeValidator:37(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/module/http/internal/request/ResponseValidatorException.html

         

    Root异常堆栈跟踪:   org.mule.module.http.internal.request.ResponseValidatorException:响应代码404映射为失败。消息有效内容的类型为:BufferInputStream       在org.mule.module.http.internal.request.SuccessStatusCodeValidator.validate(SuccessStatusCodeValidator.java:37)       at org.mule.module.http.internal.request.DefaultHttpRequester.innerProcess(DefaultHttpRequester.java:202)       在org.mule.module.http.internal.request.DefaultHttpRequester.process(DefaultHttpRequester.java:166)       + 3个以上(设置调试级别日志记录或'-Dmule.verbose.exceptions = true'用于所有内容)

         
         

    INFO 2015-03-02 14:15:34,820 [[exceptiontest] .HTTP_Listener_Configuration.worker.01] org.mule.api.processor.LoggerMessageProcessor:redelivering ...   ERROR 2015-03-02 14:15:34,822 [[exceptiontest] .HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy:

         
         

    消息:响应代码404映射为失败。消息有效内容的类型为:BufferInputStream

         

    代码:MULE_ERROR - 2

         

    异常堆栈是:   1.响应代码404映射为失败。消息有效内容的类型为:BufferInputStream(org.mule.module.http.internal.request.ResponseValidatorException)

         

    org.mule.module.http.internal.request.SuccessStatusCodeValidator:37(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/module/http/internal/request/ResponseValidatorException.html

         

    Root异常堆栈跟踪:   org.mule.module.http.internal.request.ResponseValidatorException:响应代码404映射为失败。消息有效内容的类型为:BufferInputStream       在org.mule.module.http.internal.request.SuccessStatusCodeValidator.validate(SuccessStatusCodeValidator.java:37)       at org.mule.module.http.internal.request.DefaultHttpRequester.innerProcess(DefaultHttpRequester.java:202)       在org.mule.module.http.internal.request.DefaultHttpRequester.process(DefaultHttpRequester.java:166)       + 3个以上(设置调试级别日志记录或'-Dmule.verbose.exceptions = true'用于所有内容)

         

    我期待它尝试重新发送5次,但它似乎不起作用。我做错了什么吗?非常感谢。

    ps我尝试在事务块中包装子流,但这不起作用

2 个答案:

答案 0 :(得分:2)

我会使用Until Successful Scope,因为我认为HTTP不支持重新传递(请参阅Rollback Exception Strategy的文档)。

答案 1 :(得分:1)

由于HTTP调用是无状态对象,因此定义回滚似乎不是一个好选择。 定义所需的失败条件直到成功范围,相应的重试时间似乎是满足您要求的一个很好的选择。

供参考 UntilSuccessful component to poll http endpoint till condition is met