Прокси-сервер Zuul, который динамически обнаруживает маршруты

У меня есть простое приложение Zuul, у которого есть единственный маршрут в application.yml для маршрута к моему микросервису. Это работает.

Однако то, что я ищу, - это более динамичное решение, в котором я могу динамически подключать маршруты либо через код, либо, возможно, путем отправки POST на некоторые конечные точки Zuul во время сборки (возможно, с помощью Springfox и определения чванства из микросервисов). Я не смог найти API для Zuul.

Я немного знаком с Eureka, и это похоже на решение абстрагироваться от маршрутизации путем обнаружения. Однако мне любопытно, есть ли решение без введения Эврики. Если есть способ связать эти маршруты в Zuul во время сборки, вместо того, чтобы каждый раз редактировать application.yml.

Заранее спасибо.


person Mike    schedule 02.05.2017    source источник


Ответы (2)


Если вы выберете Эврику, это действительно сработает. Zuul, упакованный в Spring Cloud, будет автоматически отображать каждую службу, используя ее имя. Поэтому, если вы зарегистрируете службу под названием users в Eureka, Zuul автоматически создаст маршрут /users, перенаправляющий экземпляры по умолчанию. Это позволит использовать только простые структуры URL-адресов, но должно решить вашу проблему.

См. официальную документацию подробнее:

По соглашению служба с идентификатором «users» будет получать запросы от прокси-сервера, расположенного в /users (с удаленным префиксом). Прокси-сервер использует ленту, чтобы найти экземпляр для пересылки через обнаружение, и все запросы выполняются в команде hystrix, …

person daniel.eichten    schedule 03.05.2017
comment
Спасибо за ответ. Я нашел эту статью, в которой рассказывается об основах Eureka и регистрации нескольких клиентов: dzone.com/articles/ Чтобы зарегистрировать приложение Gateway (Zuul), я думаю, мне не хватает части, которая делает приложение Zuul "знающим" об Eureka. Это просто вопрос записи в файле application.yml для приложения Zuul? Я продолжу исследовать себя. Спасибо. - person Mike; 03.05.2017
comment
@Mike обновил мой ответ ссылкой на документацию весеннего облака. - person daniel.eichten; 03.05.2017
comment
Дополнительное чтение docs.pivotal.io/ spring-cloud-services/2-0/common/ - person Martin; 09.05.2019

На самом деле я редактирую запись в блоге именно на эту тему (Маршрутизация и фильтрация с использованием Spring Cloud Zuul Server), но исходный код уже некоторое время доступен и работает. Не стесняйтесь использовать его в качестве ссылки:

Посмотрите на обновляемые настройки профиля Spring. Эта настройка Zuul работает как с жестко заданными URL-адресами маршрутов, так и с обнаруженными с помощью Eureka.

Он также действует как клиент Spring Cloud Config, поэтому маршруты можно динамически обновлять через Git, что также рассматривается в другом сообщении в блоге: Обновляемая конфигурация с использованием Spring Cloud Config Server, Spring Cloud Bus, RabbitMQ и Git< /а>.

person ootero    schedule 03.05.2017
comment
Спасибо. Я обязательно посмотрю. Одна вещь, с которой я борюсь в данный момент, это тот факт, что у меня включен oauth на прокси-сервере zuul: oauth2: resource: userInfoUri: https:/...../userinfo Это работает, поскольку для любых нижестоящих служб, проксируемых через Zuul, требуется действительный токен oauth. Однако конечная точка /health самого сервера zuul защищена, поэтому я думаю, что у моей Eureka возникают проблемы с пингом для регистрации. Клиент будет звонить Zuul с токеном. Итак, как мне разрешить Zuul регистрироваться в Eureka, когда прокси требует токен для вызова? - person Mike; 04.05.2017
comment
Не могли бы вы не регистрировать Zuul в Eureka и не использовать его в качестве точки входа/балансировщика нагрузки/прокси для сервисов? - person ootero; 04.05.2017
comment
Да. Я пытаюсь использовать Zuul в качестве прокси, и там включена проверка Oauth (и она работает). Однако я хочу, чтобы Zuul динамически находил все службы, зарегистрированные в Eureka (т.е. без указания каждого «маршрута» в application.yml приложения Zuul). Для этого, насколько я понимаю, мне нужно зарегистрировать Zuul как DiscoveryClient, в том числе и в Eureka. Когда я это делаю, проверка /health завершается ошибкой при попадании в Зуул, так как для этого требуется токен. Вероятно, самым простым решением для приложения Zuul было бы разрешить доступ к конечным точкам /health, /info без токена - если есть способ настроить это. Спасибо. - person Mike; 05.05.2017
comment
Ааа, интересно, я думаю, вы бы Zuul обнаружили каждую службу и настроили маршрут, следуя соглашению tle по настройке. - person ootero; 06.05.2017