Apache Компонент Camel onExceptionOccurrent не возвращается в соответствии с задержкой доставки - PullRequest
0 голосов
/ 27 января 2020

У меня есть Apache Верблюжий маршрут, который вызывает компонент перезапуска и использует механизм повторной доставки из обработчика исключений, который выполняет некоторую обработку при каждом сбое при обновлении записи базы данных, но если я предоставляю задержку повторной доставки 2000, это займет 24 секунды повторите каждую предыдущую попытку. Ниже приведен фрагмент кода. Дайте мне знать, почему это занимает больше времени, чем ожидалось.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:cxf="http://camel.apache.org/schema/cxf"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="  http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd   http://camel.apache.org/schema/spring       http://camel.apache.org/schema/spring/camel-spring.xsd  http://camel.apache.org/schema/cxf    http://camel.apache.org/schema/cxf/camel-cxf.xsd">
    <!-- CXF Rest Endpoint Declaration -->
    <cxf:rsServer address="http://localhost:9092/rest/corp"
        id="FetchCDFRestRequest" serviceClass="com.tcl.Service.Service" />

    <bean class="com.tcl.ExceptionOccurredRefProcessor" id="exProc" />

    <bean class="org.apache.camel.builder.DeadLetterChannelBuilder"
        id="DLCErrorHandler">
        <property name="deadLetterUri"
            value="activemq:queue:DMS.FAILURES.DLQ" />
        <property name="redeliveryPolicy" ref="redeliveryPolicy" />
    </bean>
    <bean class="org.apache.camel.processor.RedeliveryPolicy"
        id="redeliveryPolicy">
        <property name="maximumRedeliveries"
            value="3" />
        <property name="maximumRedeliveryDelay" value="2000" />
        <property name="retryAttemptedLogLevel" value="WARN" />
    </bean>
    <camelContext id="Corp"
        xmlns="http://camel.apache.org/schema/spring">

        <errorHandler id="eh" onExceptionOccurredRef="exProc">
            <redeliveryPolicy id="redeliveryPolicy" />
        </errorHandler>

        <route errorHandlerRef="DLCErrorHandler"
            id="MainRouteOppIDFolder" streamCache="true">
            <from id="_CreateOppIDFolder"
                uri="restlet:http://localhost:9092/rest/corp/createOppIDFolder?restletMethod=POST" />
            ----------
            <to uri="restlet:http://localhost:9902/CreateOppIDFolder?restletMethod=POST" />
            ------------    
            <onException id="_onException1"
                onExceptionOccurredRef="exProc"
                redeliveryPolicyRef="redeliveryPolicy" useOriginalMessage="true">
                <exception>java.lang.Exception</exception>
                <handled>
                    <simple>true</simple>
                </handled>
                <log id="_log3" loggingLevel="INFO"
                    message="Handled ex >>>>> ${exception.message} " />
            </onException>
        </route>
    </camelContext>
</beans>

Ниже приведены некоторые журналы

14: 47: 52.701 [Restlet-1879974483] WARN oa c .processor.DeadLetterChannel - Сбой доставки для (MessageId: ID-DESKTOP-P2DBOO5-1580115331236-0-19 на ExchangeId: ID-DESKTOP-P2DBOO5-1580115331236-0-20). При попытке доставки: 0 перехвачено: org. apache .camel.component.restlet.RestletOperationException: сбой операции перезапуска: http://localhost: 9902 / CreateOppIDFolder с statusCode: 500 / n responseBody: org. apache .cxf.interceptor.Fault: Не удалось отправить сообщение.

14: 48: 15.044 [Camel (MyCamel) thread # 15 - ErrorHandlerRedeliveryTask] WARN oa c .processor.DeadLetterChannel - Сбой доставки для (MessageId : ID-DESKTOP-P2DBOO5-1580115331236-0-19 в ExchangeId: ID-DESKTOP-P2DBOO5-1580115331236-0-20). При попытке доставки: 1 перехвачено: org. apache .camel.component.restlet.RestletOperationException: сбой операции перезапуска: http://localhost: 9902 / CreateOppIDFolder с statusCode: 500 / n responseBody: org. apache .cxf.interceptor.Fault: не удалось отправить сообщение.

14: 48: 37.252 [Camel (MyCamel) thread # 17 - ErrorHandlerRedeliveryTask] ПРЕДУПРЕЖДЕНИЕ oa c .processor.DeadLetterChannel - Сбой доставки для (MessageId : ID-DESKTOP-P2DBOO5-1580115331236-0-19 в ExchangeId: ID-DESKTOP-P2DBOO5-1580115331236-0-20). При попытке доставки: 2 перехвачено: org. apache .camel.component.restlet.RestletOperationException: сбой операции перезапуска: http://localhost: 9902 / CreateOppIDFolder с statusCode: 500 / n responseBody: org. apache .cxf.interceptor.Fault: Не удалось отправить сообщение.

Есть предложения, пожалуйста?

1 Ответ

0 голосов
/ 28 января 2020

Вы уверены, что (начало) повторной попытки занимает 24 секунды?

Не может ли это занять около 24 секунд , пока повторение не завершится неудачей (конец повторения)?

Все три оператора журнала сообщают об ошибке 500 от целевой конечной точки. Возможно ли, что повторная попытка начинается через 2 секунды, выполняет HTTP-вызов, но требуется еще 20 секунд, пока конечная точка не ответит с ошибкой 500?

00:00 error occurs
00:02 Camel triggers retry after 2 seconds
00:02 HTTP call to http://localhost:9902...
00:xx Waiting for reponse from http://localhost:9902
00:2x Log output after 20-something seconds that retry is failed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...