1

我们有一个代理服务,它执行以下操作 1. 调用后端服务以获取客户端 ID 2. 使用为该客户端 ID 配置的端点(客户端端点)并将原始请求转发到该端点。3.返回对请求的响应

早些时候,我们在将请求转发到客户端端点时将 OUT_ONLY 属性设置为 true(步骤 2)。但是我们现在必须为客户端端点使用故障转移端点配置。所以我们删除了 OUT_ONLY 属性并使用了以下故障转移配置。客户端端点不会为转发的请求返回任何响应。因此,注册的回调没有得到任何响应,并且随后被 Timeouthandler 清除。最近,我们面临一些 CPU 峰值和 ESB 引发的 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>

4

1 回答 1

0

如果您的端点没有返回任何响应,您如何判断它是否处于活动状态?

如果端点对任何类型的请求有任何类型的响应,您可以先使用“调用”中介来检查端点可用性,然后使用具有 OUT_ONLY 属性的发送中介来进行更复杂的中介。您可以使用切换调解器来评估“调用”调解器的结果,并为该调解器设置一个非常短的超时时间,以使吞吐量可以接受,即使第一个端点不可访问。这不是一个理想的解决方案,但它应该可以工作。

于 2014-12-04T19:20:07.260 回答