我正在使用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}
我在这里缺少什么?
答案 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>