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 есть имена свойств.


в моем случае мне пришлось изменить следующие свойства:

zuul.host.socket-timeout-millis=30000

я испытал ту же проблему: в длинных запросах команда 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

надеюсь, что это поможет кому-то!