1

次のことを行うプロキシサービスがあります。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>

4

1 に答える 1

0

エンドポイントが応答を返さない場合、エンドポイントがアクティブかどうかをどのように確認できますか?

エンドポイントからあらゆる種類のリクエストに対して何らかの種類の応答がある場合は、最初に「call」メディエーターを使用してエンドポイントの可用性を確認し、次に OUT_ONLY プロパティを使用して送信メディエーターを使用して、より複雑なメディエーションを実行できる場合があります。「呼び出し」メディエーターの結果を評価するためにスイッチ メディエーターを使用し、そのメディエーターに非常に短いタイムアウトを設定して、最初のエンドポイントにアクセスできない場合でもスループットを許容できるようにすることができます。これは理想的なソリューションではありませんが、機能するはずです。

于 2014-12-04T19:20:07.260 に答える