WSO2 ESB:超时后重试HTTP请求

时间:2016-04-13 16:05:40

标签: wso2 wso2esb wso2carbon

我正在使用WSO2 ESB通过代理服务将API请求发送到Heroku上托管的应用程序。

在过去的几天里,我们注意到Heroku应用程序的连接会不时超时,导致整个客户端进程失败。

这些请求是漫长过程(视频转码)的一部分,因此重新启动整个过程只是因为40个请求中有1个失败并不是真正的选择。最好在第二次(或 n )时间内自动重试每个失败的请求。

直接在客户端代码中实现“超时重试”是一团糟,所以我们认为可以通过配置端点重试所有超时请求来为我们处理它。 The WSO2 ESB documentation on endpoint error handling,通过设置一个只包含一个叶子端点的故障转移组来宣传它,在“即使罕见的消息失败是不可接受的”时处理我的确切用例。

但是,提供的示例配置似乎继续丢弃消息:

<endpoint name="SampleFailover">
    <failover>
        <endpoint name="Sample_First" statistics="enable" >
            <address uri="http://localhost/myendpoint" statistics="enable" trace="disable">
                <timeout>
                    <duration>60000</duration>
                </timeout>

                <markForSuspension>
                    <errorCodes>101504, 101505, 101500</errorCodes>
                    <retriesBeforeSuspension>3</retriesBeforeSuspension>
                    <retryDelay>1</retryDelay>
                </markForSuspension>

                <suspendOnFailure>
                    <initialDuration>1000</initialDuration>
                    <progressionFactor>2</progressionFactor>
                    <maximumDuration>64000</maximumDuration>
                </suspendOnFailure>

            </address>
        </endpoint>
    </failover>
</endpoint>

我仍然在wso2carbon.log中看到日志条目,例如:

[2016-04-13 16:02:50,576]  WARN -  Expiring message ID : urn:uuid:fd515b80-8d67-47e5-b409-0ec39ed58fc6; dropping message after timeout of : 60 seconds {org.apache.synapse.core.axis2.TimeoutHandler}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我在这个主题上添加了一些困难,目前还不清楚端点是否可以重新触发和超时调用。

阅读本教程后:https://www.yenlo.com/blog/wso2torial-error-handling-in-wso2-esb-with-wiremock?success=true,似乎是的,但我不确定......

您是否已尝试重新输入错误代码?

<timeout>
    <duration>60000</duration>
    <responseAction>fault</responseAction>
</timeout>
<suspendOnFailure>
    <initialDuration>1000</initialDuration>
    <progressionFactor>2.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
    <retriesBeforeSuspension>3</retriesBeforeSuspension>
    <retryDelay>1000</retryDelay>
</markForSuspension>