#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
Кто-нибудь имеет представление о том, как это исправить?
Это можно воспроизвести минимально автономным способом, как показано ниже
- Загрузите jar с: https://mvnrepository.com/artifact/org.springframework.cloud.stream.app/http-source-kafka/3.1.1
- Запустите экземпляр Kafka локально на порту 9092 и создайте раздел с именем «вывод».
- Запустите jar с
java -jar http-source-kafka-3.1.1.jar
- Сделайте 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.