【发布时间】:2017-05-24 18:02:54
【问题描述】:
我正在使用 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}
我在这里错过了什么?
【问题讨论】:
-
嗨 Erwan,您知道如何解决这个问题,以及如何在端点级别执行实际重试吗?在阅读了几次文档之后,重试参数实际上只是端点将被挂起的失败调用次数,而不是消息发送的重试。
-
这个问题你解决了吗?
标签: wso2 wso2esb wso2carbon