Spring Cloud Gateway преждевременно закрывает соединение

Я использую весенний облачный шлюз в качестве шлюза API в моей настройке микросервиса с консулом в качестве обнаружения службы.

В некоторых случаях, когда API какого-либо микросервиса занимает более 2 минут, шлюз выдает ошибку ниже:

java.io.IOException: Connection closed prematurely
at reactor.ipc.netty.http.client.HttpClientOperations.onInboundClose(HttpClientOperations.java:269)
at reactor.ipc.netty.channel.ChannelOperationsHandler.channelInactive(ChannelOperationsHandler.java:113)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelInactive(CombinedChannelDuplexHandler.java:420)
at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:377)
at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:342)
at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:282)
at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:223)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1429)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:947)
at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:822)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:313)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at java.lang.Thread.run(Thread.java:745)

Я пробовал один и тот же API несколько раз, ошибка возникла ровно через 2 минуты.

Есть ли настройки собственности. Детали версии и зависимости:

compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
compile('org.springframework.cloud:spring-cloud-starter-gateway')
compile('org.springframework.cloud:spring-cloud-starter-openfeign')


springBootVersion=2.0.3.RELEASE
springDMPVersion=1.0.4.RELEASE
springPlatformBomVersion=Cairo-SR2

Настройки ленты:

ribbon:
  ConnectTimeout: 3000
  ReadTimeout: 3000

person Nitin    schedule 08.12.2018    source источник
comment
Не могли бы вы предоставить пример репо с этими изменениями? Я бы хотел попробовать. Спасибо.   -  person    schedule 08.12.2018
comment
Вы используете Spring RestTemplate для отправки запросов?   -  person OlgaMaciaszek    schedule 09.12.2018
comment
Не уверен, что шлюз отвечает за пересылку запроса в приложение.   -  person Nitin    schedule 10.12.2018
comment
Да, но я вижу, что вы используете ленту, которая является балансировщиком нагрузки на стороне клиента. Полагаю, вы также контролируете клиента, который звонит? Что это за клиент?   -  person OlgaMaciaszek    schedule 11.12.2018


Ответы (2)


Возникла проблема в последующем обслуживании.

В моем приложении есть приложение nodejs, работающее за облачным шлюзом Spring, и время ожидания по умолчанию составляет 2 минуты.

Ссылка: https://github.com/expressjs/express/issues/3330

В моем случае через 2 минуты приложение nodejs выдает таймаут, поэтому я получаю ошибку на шлюзе.

Я решил это, изменив значения тайм-аута в приложении узла

person Nitin    schedule 27.05.2019

Тоже столкнулся с похожей проблемой. Когда Spring Gateway вызывал другие сервисы, он сообщал о той же ошибке при загрузке файлов. Я пытаюсь добавить следующую конфигурацию в yaml-файл вызываемой службы. Это решение. Вы тоже можете попробовать

spring: servlet: multipart: max-file-size: 50MB, max-request-size: 50MB

person caowei    schedule 13.07.2021