В настоящее время я пытаюсь реализовать функцию повтора в прокси-приложении Zuul, которое в настоящее время предоставляет URL-адреса непосредственно в конфигурации маршрутов.Можно ли добиться функциональности повтора, если указать URL-адреса непосредственно под маршрутами (как в примере ниже)?
zuul:
prefix: /api
sensitive-headers: Cookie,Set-Cookie
routes:
servicea:
path: /servicea
stripPrefix: true
url: ${servicea.url}
serviceb:
path: /serviceab
stripPrefix: true
url: ${serviceb.url}
ribbon:
ReadTimeout: 60000
Приложение перенаправляет на внешние приложения, которые запускаются балансировщиком нагрузки (ALB), такВ этом случае балансировка нагрузки на стороне клиента и обнаружение службы не нужны.
Приложение использует следующую зависимость для Zuul:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
Предполагается, что это невозможно (документы кажутсячтобы указать на это), я надеялся получить некоторую помощь в понимании того, как мне следует настроить приложение для включения повторных попыток.Исходя из того, что я прочитал, должна работать следующая конфигурация:
zuul:
prefix: /api
sensitive-headers: Cookie,Set-Cookie
routes:
servicea:
path: /servicea
stripPrefix: true
retryable: true
serviceId: servicea
serviceb:
path: /serviceab
stripPrefix: true
retryable: true
serviceId: serviceb
servicea:
ribbon:
ReadTimeout: 10000
ConnectTimeout: 10000
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
listOfServers: ${servicea.url}
stripPrefix: true
MaxAutoRetries: 1
OkToRetryOnAllOperations: true
serviceb:
ribbon:
ReadTimeout: 10000
ConnectTimeout: 10000
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
listOfServers: ${serviceb.url}
stripPrefix: true
MaxAutoRetries: 1
OkToRetryOnAllOperations: true
ribbon:
IsSecure: true
eureka:
enabled: false
ReadTimeout: 60000
Когда я пытаюсь реализовать ее таким образом, я сталкиваюсь с проблемой, когда приложение не включает имя хоста, указанное в listOfServers
имущество.HTTP-запросы явно не выполняются из-за этого (URL-адрес - это просто протокол, контекстный путь и остальная часть пути).
URL-адреса в конфигурации вводятся в PropertySource во время запуска.Один из URL-адресов будет выглядеть следующим образом:
https://servicea.domain/servicea
В этом примере URL-адрес представляет собой CNAME для балансировщика нагрузки.Вторая конфигурация - это маршрутизация следующим образом:
Путь к приложению Spring Cloud: /servicea/v1/someeapi
Генерируемый URL:
https:/servicea/v1/someapi
Как вы можете видеть, приложение удаляет хост и домен с URL-адреса, что приводит к сбою запросов.
Я что-то упустил в этой конфигурации?В настоящее время я не настраиваю Spring Cloud где-либо еще в приложении (кроме предоставления аннотаций @EnableZuulProxy
и @EnableRetry
в основном классе).