Почему Spring Cloud @EnableSidecar использует @EnableCircuitBreaker - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть приложение на python, использующее порт 8004, который имеет конечные точки.Мне нужно интегрировать его в платформу микросервисов, которая имеет порт 8001 Eureka discovery server, порт 8002 Spring Boot Admin, порт 80 шлюза. Шлюз использует прокси Zuul и перенаправляет запросы в требуемые службы.

У меня есть два варианта:

  1. Измените код моего python-приложения, чтобы оно могло иметь конечные точки для служб Spring Cloud
  2. Или используйте Spring Cloud Sidecar - в котором реализованы эти конечные точки.https://cloud.spring.io/spring-cloud-netflix/multi/multi__polyglot_support_with_sidecar.html

Я решил иметь коляску.Порт коляски 8003, порт Python-приложения 8004. @EnableSidecar аннотация + @EnableDiscoveryClient - и магия.Затем мне нужно добавить конфигурацию шлюза для пересылки запросов в python-сервис.И мне нужна конфигурация для коляски Zuul Proxy, чтобы она перенаправляла запросы к приложению python.

порт 80 шлюза -> порт sidecar 8003 -> порт python-app 8004.

Прекрасно, и этоработает.Когда я открываю веб-интерфейс Eureka, там есть все сервисы.Когда я открываю интерфейс пользователя Spring Boot Admin, он говорит, что служба python (его коляска) не работает.

Клиент Spring Boot Admin (конфигурация на стороне коляски), его порт 28003, поэтому он отличается от коляски.

management:
  server:
    port: 18003
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS

Я заменил @EnableSidecar на @EnableZuulProxy.Теперь все работает, и приложение python-app видно в Spring Boot Admin.

Мои два вопроса:

  1. Почему @EnableSidecar имеет @EnableCircuitBreaker, если sidecar нетнужен автоматический выключатель по умолчанию?Это имеет смысл, если есть один экземпляр sidecar и несколько экземпляров python-сервиса.У меня 1: 1 - одна коляска и одно python-приложение.Если приложение python недоступно, sidecar должен вернуть ошибку.Мне не нужен выключатель?Или я?

  2. Почему аннотация @EnableSidecar влияет на клиента Spring Boot, поэтому она не отображается в интерфейсе администратора Spring Boot.Я думаю, что есть ошибка, или как мне включить отслеживание боковой панели в веб-интерфейсе Spring Boot Admin.

Версия Spring Boot 2.0.7, версия Spring Cloud 2.0.0

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Что ж, я решил эту проблему, обновив Spring Cloud до версии 2.1.1-RELEASE. Тогда у меня была другая проблема.

Field restTemplate in org.springframework.cloud.netflix.sidecar.LocalApplicationHealthIndicator required a single bean, but 3 were found

Чтобы это исправить, я добавил конфигурацию

@Configuration
public class RestTemplateConfig {

    @Primary
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

С логической точки зрения коляска должна пересылать запросы в приложение. С Hystrix он не будет ждать своевременного ответа, а скорее провалится быстрее. Каковы другие причины наличия схемы и функциональности автоматического выключателя в коляске?

0 голосов
/ 29 апреля 2019

Коляска не должна передавать запросы через прокси в службу не-jvm.Он использует клиент java eureka для регистрации от имени службы не-jvm.Сервис не-jvm может затем использовать встроенный zuul в коляске для отправки запросов другим сервисам.Он не должен знать о eureka, hystrix (автоматический выключатель) или ленте (клиентский балансировщик нагрузки на стороне клиента), но это необязательно.

...