HTTP-клиент Apache Camel периодически задерживает запросы к серверной части SOAP IIS/.NET, вызывая исключение SocketTimeJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 HTTP-клиент Apache Camel периодически задерживает запросы к серверной части SOAP IIS/.NET, вызывая исключение SocketTime

Сообщение Anonymous »

У меня есть XML-сервис Apache Camel, созданный на основе микросервиса REST на основе SpringBoot DSL, который действует как промежуточный уровень программного обеспечения преобразования.
Последовательность действий:
  • Запрос REST JSON --> XML-маршруты Apache Camel
  • Camel преобразует JSON в SOAP XML
  • Camel вызывает серверную часть SOAP, размещенную в Windows IIS (.NET Framework)
Мы периодически наблюдаем задержки в сети/выполнении, когда кажется, что запрос от Camel поздно достигает серверной части SOAP, и в конечном итоге Camel выдает исключения тайм-аута.
Симптомы
  • Запросы периодически занимают много времени, прежде чем начнется выполнение серверной части.
  • Некоторые запросы выполняются нормально.
  • Тайм-аут некоторых запросов истекает после долгого ожидания.
  • Команда серверной обработки сообщает, что иногда они видят, что запрос поступает с опозданием со стороны Camel.
  • Слой Apache Camel в конечном итоге выдает исключение SocketTimeoutException
Exception

Код: Выделить всё

Suppressed: java.net.SocketTimeoutException:  Read timed out
at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:278)
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:304)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:346)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:796)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:1099)
at org.apache.hc.core5.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:149)
at org.apache.hc.core5.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280)
at org.apache.hc.core5.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:247)
at org.apache.hc.core5.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:54)
at org.apache.hc.core5.http.impl.io.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:304)
at org.apache.hc.core5.http.impl.io.HttpRequestExecutor.execute(HttpRequestExecutor.java:175)
at org.apache.hc.core5.http.impl.io.HttpRequestExecutor.execute(HttpRequestExecutor.java:218)
at org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager$InternalConnectionEndpoint.execute(PoolingHttpClientConnectionManager.java:717)
at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.execute(InternalExecRuntime.java:216)
at org.apache.hc.client5.http.impl.classic.MainClientExec.execute(MainClientExec.java:116)
at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
Приложение Apache Camel.properties

Код: Выделить всё

# ============ HTTP POOLING ==========================
camel.component.http.max-total-connections=300
camel.component.http.connections-per-route=100
camel.component.http.connect-timeout=2000
camel.component.http.connection-request-timeout=1000
camel.component.http.response-timeout=120000
camel.component.http.so-timeout=120000
camel.component.http.connection-time-to-live=300000
camel.component.http.cookie-management-disabled=true
camel.component.http.automatic-retries-disabled=true
camel.component.http.client-connection-manager=#bean:pooledConnectionManager
camel.component.http.log-http-activity=true
# =======================================================
# ===== Circuit Breaker Config ======
cb.failureRateThreshold=50
cb.minimumNumberOfCalls=10
cb.waitDurationInOpenState=60000
cb.slidingWindowSize=20
cb.permittedNumberOfCallsInHalfOpenState=5
cb.timeoutDuration=110000
Дополнительная информация
  • Использование HTTP-компонента Apache Camel с пулом Apache HttpClient5
  • Бэкенд — это служба SOAP, размещенная в IIS с использованием .NET Framework.
  • Проблема возникает периодически, и ее трудно воспроизвести последовательно.
  • В приложении Camel не наблюдается скачков нагрузки на ЦП/память
Вопросы
  • Может ли это быть вызвано устаревшими/заблокированными пуловыми HTTP-соединениями в Camel HttpClient5?
  • Такое же поведение наблюдается даже без HTTP объединение в пул.
  • Существует ли вероятность того, что очередь подключений IIS или нехватка потоков пула приложений задерживают обработку запроса?
  • Каковы наилучшие способы диагностики возникновения задержки:
    • прежде, чем запрос покинет Camel
    • во время сетевого транзита
      />
    • внутри серверной части IIS/.NET
  • Кто-нибудь видел периодическую задержку выполнения между Apache Camel и службами SOAP, размещенными в IIS?
Любые предложения по стратегиям отладки, настройке HttpClient, настройкам IIS или TCP/сети анализ будет признателен.
Технический стек:
  • Apache Camel (4.8.0) XML DSL
  • Java 17
  • SpringBoot v3.3.6
  • Apache HttpClient5
  • IIS на Windows Server
  • SOAP (серверная часть .NET Framework)
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»