Верблюжьи нити в ненормальном состоянии ожидания - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть приложение Springboot Camel. Это мой верблюжий маршрут

<?xml version="1.0" encoding="UTF-8"?>

<log message="direct:get_so_default request_payload=$simple{body}"/>

<doTry>
    <bean id="col0" ref="stepExecuter" method="execute('endPoint1A')"/>
    <bean id="col1" ref="stepExecuter" method="execute('endPoint1B')"/>
    <bean id="col2" ref="stepExecuter" method="execute('endPoint3')"/>
    <bean id="col3" ref="stepExecuter" method="execute('endPoint1C')"/>
    <bean id="col4" ref="stepExecuter" method="execute('endPoint5')"/>
    <bean id="col5" ref="stepExecuter" method="execute('endPoint6')"/>
    <bean id="col6" ref="stepExecuter" method="execute('endPoint7')"/>
    <bean id="col7" ref="stepExecuter" method="execute('endPoint8')"/>
    <bean id="col8" ref="stepExecuter" method="execute('endPoint9')"/>
    <bean id="col9" ref="stepExecuter" method="execute('endPoint10')"/>
    <doCatch>
        <exception>java.util.concurrent.TimeoutException</exception>
        <exception>java.lang.Exception</exception>
        <handled><constant>true</constant></handled>
        <process ref="customExceptionProcessor"/>
        <log loggingLevel="ERROR" message="msg=onException route=so_default handler=TimeoutException $simple{exception.stacktrace}"/>

    </doCatch>
</doTry>

Конечная точка 1A, 1B, 1 C - маршруты с списками получателей. В то время как вышеупомянутые шаги выполняются последовательно, когда он выполняет 1A, он делает 2 вызова REST параллельно. данные, полученные из 1А, поступают в обмен и используются в 1В. 1B также является списком получателей, и существует 4 параллельных вызова к различным конечным точкам.

Каждый шаг записывает, сколько времени это занимает. Время начала, время окончания.

Остальные все шаги являются шагами обработки без внешних вызовов, таких как сортировка и фильтрация. Иногда я замечаю, что после 8-го шага перед началом 9-го шага наблюдается огромное отставание. Как почти 800 мс. Шаг 8 - просто шаг сортировки, и журнал показывает, что это сделано за 0 мс. Я не могу понять, что вызывает отставание. Все шаги выполняются в главном потоке. список получателей имеет собственный пул потоков.

Как можно глубже понять, что происходит?

Springboot - 2.1.11.RELEASE Java - 1.8 Camel Version - 2,25,0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...