Поток данных в облаке Spring http источник проблема с размером памяти тела запроса приложения kafka

#java #spring #spring-cloud-stream #spring-cloud-dataflow

#java #spring #spring-cloud-stream #spring-cloud-поток данных

Вопрос:

Я столкнулся с проблемой с исходным приложением HTTP в потоке потока данных Spring cloud.

 org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
    at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:98) ~[spring-core-5.3.10.jar:5.3.10]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
    |_ checkpoint ? org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.cloud.sleuth.instrument.web.TraceWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? HTTP POST "/" [ExceptionHandlingWebHandler]
 

Это происходит, когда я пытаюсь отправить HTTP-запрос с огромным размером тела в конечную точку HTTP.

Я попытался установить следующее свойство в развертывании, которое мне не помогло:

 app.http.spring.codec.max-in-memory-size: 10MB
 

используемая версия исходного приложения spring cloud starter HTTP Kafka — 3.1.1

Кто-нибудь имеет представление о том, как это исправить?

Это можно воспроизвести минимально автономным способом, как показано ниже

  1. Загрузите jar с: https://mvnrepository.com/artifact/org.springframework.cloud.stream.app/http-source-kafka/3.1.1
  2. Запустите экземпляр Kafka локально на порту 9092 и создайте раздел с именем «вывод».
  3. Запустите jar с java -jar http-source-kafka-3.1.1.jar
  4. Сделайте HTTP post-запрос на localhost: 8080 с размером тела запроса более 700 КБ

Комментарии:

1. Как мы можем воспроизвести проблему автономным способом минимальным способом? Похоже, вы можете воспроизвести его, просто запустив источник HTTP с помощью java -jar... .

2. @sobychacko Я обновил вопрос с помощью шагов, чтобы воспроизвести его минимально.

Ответ №1:

Спасибо, что подняли этот вопрос!

Оказывается, что HttpSupplierConfiguration для этого приложения с HTTP-исходным кодом не учитывается ServerCodecConfigurer автоматически настраиваемое Spring Boot, включая упомянутое spring.codec.max-in-memory-size свойство.

У меня есть такое исправление: https://github.com/spring-cloud/stream-applications/pull/204 , который скоро будет объединен.

К сожалению, для готового приложения нет простого решения. Вы можете рассмотреть возможность реализации собственного исходного приложения с пользовательской конечной точкой входящего HTTP.