Краткий ответ
ribbon:
eureka:
enabled: false
Spring Cloud Netflix Zuul использует Лента Netflix для выполнения балансировки нагрузки на стороне клиента , и по умолчанию Лента будет использовать Netflix Eureka для обнаружение службы . Вы пропускаете обнаружение службы , поэтому вы установили ribbon.eureka.enabled
на false
. Поскольку Ribbon теперь не может использовать Eureka для поиска служб, необходимо указать URL для службы meeting
:
meeting:
ribbon:
listOfServers: localhost:8080
Расширенный ответ
Я сделаю это более понятным для вас.
Зависимость org.springframework.cloud:spring-cloud-starter-netflix-zuul
, которую вы сейчас используете в проекте gatekeeper
, имеет несколько зависимостей компиляции:
com.netflix.zuul:zuul-core
org.springframework.boot:spring-boot-starter-web
org.springframework.boot:spring-boot-starter-actuator
org.springframework.cloud:spring-cloud-netflix-zuul
org.springframework.cloud:spring-cloud-starter
org.springframework.cloud:pring-cloud-starter-netflix-hystrix
org.springframework.cloud:spring-cloud-starter-netflix-ribbon
org.springframework.cloud:spring-cloud-starter-netflix-archaius
Как видите, он состоит из множества компонентов, собранных вокруг модуля com.netflix.zuul:zuul-core
(включая Eureka для обнаружения экземпляров и Ribbon для маршрутизации):
При запуске приложения gatekeeper
применяется стандартная конфигурация ZuulProxyAutoConfiguration
. Импортирует классы конфигурации ленты:
@Configuration
@Import({ RibbonCommandFactoryConfiguration.RestClientRibbonConfiguration.class,
RibbonCommandFactoryConfiguration.OkHttpRibbonConfiguration.class,
RibbonCommandFactoryConfiguration.HttpClientRibbonConfiguration.class,
HttpClientConfiguration.class })
@ConditionalOnBean(ZuulProxyMarkerConfiguration.Marker.class)
public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { ... }
HttpClientRibbonConfiguration
, в свою очередь, инициализирует RibbonLoadBalancingHttpClient
, который отвечает за сообщения об ошибках, которые вы видели.
То, что RibbonLoadBalancingHttpClient
по умолчанию использует ZoneAwareLoadBalancer
из пакета com.netflix.ribbon:ribbon-loadbalancer
:
По умолчанию балансировки нагрузки Zuul с использованием ZoneAwareLoadBalancer
от ленты. Алгоритм представляет собой циклический перебор экземпляров, доступных в обнаружении, с отслеживанием успешности зоны доступности для обеспечения устойчивости. Балансировщик нагрузки будет хранить статистику для каждой зоны и удалит зону, если частота отказов превышает настраиваемый порог.
Если вы хотите использовать свой собственный балансировщик нагрузки, вы можете установить свойство NFLoadBalancerClassName
для этого пространства имен клиента ленты или переопределить метод getLoadBalancerClass()
в DefaultClientChannelManager
. Обратите внимание, что ваш класс должен расширяться DynamicServerListLoadBalancer
.
Это объясняет, что Zuul делегирует работу по маршрутизации и балансировке нагрузки компонентам ленты и доказывает, что вы фактически используете ленту в проекте gatekeeper
.
Если вы не выберете другой балансировщик нагрузки, вам следует обратиться к моему первоначальному ответу.
Я надеюсь, что это поможет.