我们有一个代理服务,可以执行以下操作 1.调用后端服务以获取客户端ID 2.使用为该客户端ID配置的端点(客户端端点),并将原始请求转发到该端点。 3.返回对请求的响应
之前我们将OUT_ONLY属性设置为true,同时将请求转发到客户端端点(步骤2)。 但我们现在必须为客户端端点使用故障转移端点配置。所以我们删除了OUT_ONLY属性并使用了 以下故障转移配置。客户端端点不会为转发的请求返回任何响应。 由于这个原因,注册的回调没有得到任何响应,随后由Timeouthandler清除。 最近我们面临一些由ESB抛出的CPU峰值和OutOfMemory错误。 我们怀疑突触回调处理程序正在利用大部分系统资源而无法恢复。 此配置是否可以创建任何OutOfMemory错误(如果压力测试),因为客户端端点没有返回任何响应? 请建议。
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="client_forward_endpoint_110">
<failover>
<endpoint name="primary">
<address uri="--primary endpoint--">
<enableAddressing />
<timeout>
<duration>30</duration>
<action>discard</action>
</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>
<endpoint name="secondary">
<address uri="--secondary endpoint--">
<enableAddressing />
<timeout>
<duration>30</duration>
<action>discard</action>
</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>
答案 0 :(得分:0)
如果您的端点没有返回任何响应,您如何判断它是否处于活动状态?
如果从端点到任何类型的请求都有任何类型的响应,您可以使用第一个“调用”中介来检查端点可用性,然后使用具有OUT_ONLY属性的发送中介来执行更复杂的中介。您可以使用交换机中介来评估“调用”中介的结果,并为该中介设置非常短的超时,以使吞吐量可接受,即使第一个端点不可访问也是如此。它不是一个理想的解决方案,但它应该有效。