Zuul тайм-аут в длинных запросах
Я использую переднее приложение spring cloud (micro service), действующее как прокси-сервер zuul (@EnableZuulProxy) для маршрутизации запросов от внешнего источника к другим внутренним микро-службам, написанным с помощью spring cloud (spring boot).
Сервер zuul находится прямо из приложений в разделе образцы
@SpringBootApplication
@Controller
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuulServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args);
}
}
Я запустил этот набор услуг локально, и все это, кажется, работает нормально, но если я запускаю его в сети с некоторой нагрузкой или через VPN, то я начинаю видеть zuul переадресация ошибок, которые я вижу как таймауты клиента в журналах
есть ли способ изменить тайм-аут на Zuul вперед, чтобы я мог устранить эту проблему из моих непосредственных проблем. Какие доступные настройки параметров существуют для этого.
Я нахожусь в середине выпуска, и это только что появилось:)
7 ответов
свойства для установки:ribbon.ReadTimeout
в целом и <service>.ribbon.ReadTimeout
для определенной службы, в миллисекундах. The Лента wiki есть несколько примеров. это javadoc есть имена свойств.
я испытал ту же проблему: в длинных запросах команда hystrix Zuul продолжала отсчитывать время примерно через секунду, несмотря на настройку ribbon.ReadTimeout=10000
.
я решил это, полностью отключив таймауты:
hystrix:
command:
default:
execution:
timeout:
enabled: false
альтернативой, которая также работает, является изменение стратегии изоляции Hystrix Zuul в поток:
hystrix:
command:
default:
execution:
isolation:
strategy: THREAD
thread:
timeoutInMilliseconds: 10000
мне пришлось изменить два тайм-аута, чтобы заставить zuul прекратить синхронизацию длительных запросов. Даже если таймауты hystrix отключены, лента все равно будет таймаутом.
hystrix:
command:
default:
execution:
timeout:
enabled: false
ribbon:
ReadTimeout: 100000
ConnectTimeout: 100000
это сработало для меня, я должен был установить тайм-аут соединения и сокета в application.yml
:
zuul:
host:
connect-timeout-millis: 60000 # starting the connection
socket-timeout-millis: 60000 # monitor the continuous incoming data flow
если Zuul использует Service discovery, вам нужно настроить эти таймауты с помощью ribbon.ReadTimeout
и ribbon.SocketTimeout
свойства ленты.
если вы настроили маршруты Zuul, указав URL-адреса, вам нужно использовать zuul.host.connect-timeout-millis
и zuul.host.socket-timeout-millis
под маршрутами я имею в виду
zuul:
routes:
dummy-service:
path: /dummy/**
только эти параметры на application.yml
работала на меня:
ribbon:
ReadTimeout: 90000
ConnectTimeout: 90000
eureka:
enabled: true
zuul:
host:
max-total-connections: 1000
max-per-route-connections: 100
semaphore:
max-semaphores: 500
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000000
надеюсь, что это поможет кому-то!