перехват конечной точки в WSO2 EI 6.2 - PullRequest
1 голос
/ 26 февраля 2020

У меня есть API в EI 6.2, который вызывает внутреннюю конечную точку. Иногда этот EP находится в автономном режиме, и, следовательно, время ожидания вызова. Я хочу зафиксировать этот таймаут и инкапсулировать его в индивидуальный ответ перед отправкой клиенту. Идея кажется достаточно простой, но мне трудно ее реализовать. Я попытался добавить следующий раздел в декларацию EP. Насколько я понимаю, свойство action = fault должно заставить EP выдавать ошибку, когда тайм-ауты запроса (и, следовательно, перехватывается последовательностью обработчика ошибок), но этого не происходит. Кто-нибудь есть какие-либо предложения о том, как справиться с этой ситуацией?

Спасибо.

Педро

Мой EP:

<?xml version="1.0" encoding="UTF-8"?>
<endpoint name="wacs_parameters.endpoint" xmlns="http://ws.apache.org/ns/synapse">
    <loadbalance algorithm="org.apache.synapse.endpoints.algorithms.RoundRobin">
        <endpoint name="WACS_CpeGm_Parameters_Master">
            <http method="GET" uri-template="http://xpto
                <suspendOnFailure>
                    <initialDuration>-1</initialDuration>
                    <progressionFactor>1.0</progressionFactor>
                </suspendOnFailure>
                <markForSuspension>
                    <retriesBeforeSuspension>0</retriesBeforeSuspension>
                </markForSuspension>
                <timeout>
                    <duration>3000</duration>
                    <action>fault</action>
                </timeout>
            </http>
        </endpoint>
    </loadbalance>
    <description/>
</endpoint>

И это журнал из запрос отредактирован для наглядности:

[2020-02-26 16:38:33,962] [EI-Core]  WARN - TimeoutHandler Expiring message ID : urn:uuid:8b9c9632-ef0b-423d-9827-84eee517b75d; dropping message after ENDPOINT_TIMEOUT of : 3 seconds for Endpoint [WACS_CpeGm_Parameters_Master], URI : xpto, Received through API : ClientEquipmentsAPI
[2020-02-26 16:38:41,318] [EI-Core]  WARN - ConnectCallback Connection refused or failed for : /10.217.49.10:8280
[2020-02-26 16:38:41,318] [EI-Core]  WARN - SynapseCallbackReceiver Synapse received a response for the request with message Id : urn:uuid:8b9c9632-ef0b-423d-9827-84eee517b75d But a callback is not registered (anymore) to process this response
[2020-02-26 16:40:33,967] [EI-Core]  WARN - TimeoutHandler Expiring message ID : urn:uuid:2a928d56-cf7f-4950-a5f4-8033798e205e; dropping message after GLOBAL_TIMEOUT of : 120 seconds for Endpoint [API_ClientEquipments_Endpoint_Master], URI : xpto, Received through API : ClientEquipmentsAPI
[2020-02-26 16:41:20,394] [EI-Core]  INFO - SourceHandler Writer null when calling informWriterError
[2020-02-26 16:41:20,394] [EI-Core]  WARN - SourceHandler Connection time out after request is read: http-incoming-10 Socket Timeout : 180000 Remote Address : /127.0.0.1:53092
[2020-02-26 16:41:20,408] [EI-Core]  INFO - SourceHandler Writer null when calling informWriterError
[2020-02-26 16:41:20,408] [EI-Core]  WARN - TargetHandler Connection time out after while in state : REQUEST_DONE Socket Timeout : 180000 Remote Address : localhost/127.0.0.1:8280
[2020-02-26 16:41:20,408] [EI-Core]  WARN - SourceHandler Connection time out after request is read: http-incoming-11 Socket Timeout : 180000 Remote Address : /127.0.0.1:53093
[2020-02-26 16:41:20,409] [EI-Core]  WARN - SynapseCallbackReceiver Synapse received a response for the request with message Id : urn:uuid:2a928d56-cf7f-4950-a5f4-8033798e205e But a callback is not registered (anymore) to process this response

1 Ответ

1 голос
/ 11 марта 2020

Итак, просто для того, чтобы сообщить другим, у кого может быть та же проблема: по истечении времени ожидания конечной точки EI активирует последовательность ошибок. Там вы можете поймать ошибку и правильно ее устранить. Свойство ERROR_MESSAGE подробно описывает тип ошибки, как описано здесь

https://docs.wso2.com/display/EI640/Error+Handling

В этом примере последовательности перехватываются тайм-ауты и возвращается настроенный код ошибки (с HTTP 502):

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="faultSequence_ClientEquipmentsAPI" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <switch source="get-property('ERROR_CODE')">
        <case regex="101503|101504">
            <call-template target="faultTemplate_clientEquipmentsAPI">
                <with-param name="res_messageCode" value="801"/>
                <with-param name="res_message" value="Timeout waiting answer of backend system"/>
            </call-template>
            <property name="HTTP_SC" scope="axis2" type="STRING" value="502"/>
            <respond/>
        </case>
   </switch>
</sequence>
...