Введение в Spring Cloud Gateway
Официальная версия Spring Boot 2 была выпущена некоторое время назад. Spring Cloud Gateway основан на Spring Boot 2 и является совершенно новым проектом Spring Cloud. Проект предоставляет шлюз API, построенный на весенней экосистеме, в том числе: Spring 5, Spring Boot 2 и Reactor Reactor. Spring Cloud Gateway предназначен для обеспечения простого и эффективного способа отправки API и предоставления им перекрестных проблем, таких как: безопасность, мониторинг/показатели и устойчивость. Текущая последняя версия v2.0.0.m8, и официальная версия также скоро будет здесь.
Особенности Spring Cloud Gateway:
против Netflix Zuul
Zuul основан на сервлете 2.5 (с использованием 3.x), используя блокирующий API. Он не поддерживает никаких длинных соединений, таких как веб -токеты. В то время как шлюз построен на Spring Framework 5, Project Reactor и Spring Boot 2, используя неблокирующий API. WebSockets поддерживается и станет лучшим опытом разработки, потому что он тесно интегрирован с Spring.
Практика ВВЕДЕНИЯ ВВЕДЕНИЕ
Автор недавно изучил исходный код Spring Cloud Gateway и написал статьи об анализе исходного кода для большинства функций, но в конце концов официальная версия не была выпущена. Эта статья представляет собой вступительную практику, показывающую несколько обще используемых функций, и с нетерпением ожидает выпуска последней официальной версии.
Пример начинается с двумя службами: Gateway-Server и пользователь-сервер. Моделируемый сценарий заключается в том, что клиент запрашивает сервис бэкэнд, а шлюз обеспечивает единый вход в сервисную службу. Все сервисные услуги зарегистрированы в Сервисе и найдены консул (как Build ZK, так и Eureka в порядке, и я больше привык к использованию консула). Ворота направляется в конкретные сервисные сервисы посредством балансировки нагрузки.
Пользовательский сервис
Пользовательская служба зарегистрирована в консуле и предоставляет интерфейс/тест.
полагаться
Требуемые зависимости следующие:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
Файл конфигурации
Весна: Приложение: Имя: Пользовательский сервис Облако: Консультация: Хост: 192.168.1.204 Порт: 8500 Discovery: IP-Address: $ {host_address: localhost} Порт: $ {Server_port: $ {Server.port}} HealthCheckpath: /HealthCheckEnterVal: 15S exactor-inde-ind: umport {server.port. 8005Management: Security: включено: falseРазоблачить интерфейс
@SpringBootApplication@RestController@enabledIscoveryClientPublic класса GatewayUserApplication {public static void main (string [] args) {SpringApplication.run (gatewayuserApplication.class, args); } @GetMapping ("/test") public String test () {return "ok"; }}Разоблачить/тестировать интерфейс и вернуть ОК.
Грамовые услуги
Service Gateway предоставляет различные конфигурации маршрутизации, заводы по маршрутизации и фильтрующие фабрики.
полагаться
Зависимости, которые необходимо ввести:
<depervice> <groupid> org.springframework.boot </GroupId> <artifactId> Spring-boot-Actuator </artifactid> </dependence> // Зависимость от webflux, необходимо ввести <Devestion> <groupid> org.springframe.boot </Groupid> <ratfactid> Spring-boot-starter-webflux </artifactid> </deperency> <dependency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-gateway-core </artifactid> </зависимость> // Компонент обнаружения услуг, исключая веб-зависимость <Зависимость> <Зависимость> <groupId> org.springframework.cloud </GroupId> <ArtifactId> Spring-Cloud-Starter-consul-discovery </artifactid> <sersive> 2.0.0.m6 </version> <исключение> <coldusion> <groupid> org.springframe.boot </GroupId> <ratifactid> spring-boot-starter-starter-starter-starter-starter-starter-starter-startrame. </Исключения> </deploymency> // kotlin Depertive <Devestinency> <groupid> org.jetbrains.kotlin </GroupId> <artifactid> kotlin-stdlib </artifactid> <serse> $ {kotlin.version} </version> <pothing> true </option> </upecty> <Зависимость> </версия> </reportal> </option> </ueperend> <groupId> org.jetbrains.kotlin </GroupId> <artifactid> Kotlin-reflect </artifactid> <sersive> $ {kotlin.version} </version> <plosive> true </opportal> </dependence>Как упомянуто выше, вводятся связанные с котлин зависимости, и здесь необходимо поддерживать конфигурацию маршрутизации котлина. Использование Spring Cloud Gateway требует исключения веб-конфигураций. Он вводит ссылки на Webflux. Он будет проверен при запуске приложения и должно быть введено.
Завод по маршрутизации
Существует много типов заводов по маршрутизации, в зависимости от времени запроса, хоста, пути, метода и т. Д.
@Beanpublic routerfunction <sersustresponse> testfunrouterfunction () {routerFunction <sersponse> route = routerFunctions.Route (requestPredicates.path ("/testfun"), запрос -> serverresponse.ok (). Bodyinserters.fromobject ("hello")); возврат маршрута;}Когда запрошенный путь - /testfun, код состояния ОК возвращается, а корпус ответа - это строка Hello.
Фильтерная фабрика
Шатрам часто необходимо отфильтровать запросы на маршрутизацию и выполнять некоторые операции, такие как строительство заголовков после аутентификации. Существует много типов фильтрации, таких как добавление заголовков запросов, добавление параметров запроса, добавление заголовков ответов и автоматических выключателей и т. Д.
@Beanpublic routeLocator CustomRouteLocator (RouteLocatorBuilder Builder, ThroTTleGateWayFilterFactory Throttle) {//@Formatter: Off return Builder.routes () .route (r -> r.path ("/image/webp") .filters (f -> f.adresponsesonsesesese ("x -hoThere", "). .uri ("http://httpbin.org:80")) .build (); //@formatter: on}Как указано выше, когда путь запроса является/Image/WebP, запрос пересылается на http://httpbin.org:80, а ответ фильтруется, добавляя заголовок ответа x-anotherheader: Baz.
Пользовательская маршрутизация
Вышеуказанные два подраздела принадлежат пользовательской маршрутизации API, а также могут быть определены с помощью конфигурации:
Spring: Cloud: Gateway: Locator: включен: True Default-Filters:-AddResponseHeader = x-response-default-foo, маршруты по умолчанию: # ==================================================================================================================== ==================================================================================================================== ==================================================================================================================== ========================================================================================================
Приведенная выше конфигурация определяет маршрутизацию и фильтры. Глобальный фильтр добавляет все ответы в заголовок рентгеновского x-refonse-default-foo: по умолчанию. Определен маршрут с ID Default_PATH_TO_HTTP, но приоритет относительно низкий. Когда запрос не может соответствовать, он будет перенаправлен на Blueskykong.com.
Kotlin пользовательская маршрутизация
Spring Cloud Gateway может использовать Kotlin для настройки маршрутизации:
@Configurationclass opredroutes {@bean fun exoterrouteLocator (Builder: RouteLocatorBuilder): routeLocator = builder.routes {route (id = "test-kotlin") {path ("/image/png") фильтры {addresponseseHeader ("x-testerer", ") uri ("http://httpbin.org:80")}}}Когда запрошенный путь-/Image/PNG, он будет перенаправлен на http://httpbin.org:80, и установлен фильтр, и заголовок x-testheader: foobar добавляется в заголовок ответа.
Компоненты обнаружения услуг
В сочетании с регистрацией услуг в компоненте Discovery, направленной в конкретный экземпляр службы через ServiceID. Соответствующие зависимости были введены в предыдущей конфигурации.
@BeanPublic RoutedEfinitionLocator DiscoveryClientRouteDefinitionLocator (DiscoveryClient DiscoveryClient) {возвращает новый DiscoveryClientRoutEdeFinitionLocator (DiscoveryClient);} Inject DiscoveryClient в конструктор DiscoveryClientRoutedEfinitionLocator. Анализ исходного кода будет объяснен позже и не будет расширен здесь.
Spring: Cloud: Gateway: Locator: включен: True Default-Filters:-AddResponseHeader = x-response-default-foo, маршруты по умолчанию: # ====================================================================== = - stripprefix = 1
Вышеуказанная конфигурация позволяет реализации локатора DiscoveryClient. Маршрут определяет, что все запросы, которые начинаются с /пользователя, будут перенаправлены в службу пользователя, а фильтр пути будет применяться для перехвата первой части префикса пути. То есть фактический запрос на доступ к доступу/пользователь/тест преобразуется в lb: // user/test.
WebSocket
Вы также можете настроить маршрутизацию шлюза WebSocket:
Spring: Cloud: Gateway: Filters по умолчанию:-AddResponseHeader = x-response-default-foo, маршруты по умолчанию:-ID: webSocket_test uri: ws: // localhost: 9000 Заказ: 9000 Предсказания:-path =/echo
Запустите WS Server WSCAT -Listen 9000, запустите шлюз (порт шлюза 9090) и подключите клиент к WSCAT -Connect WS: // localhost: 9090/echo.
Клиентский доступ
Читатели могут скачать исходный код, чтобы попробовать вышеуказанные функции. Здесь я показываю только результаты доступа к службам пользователей:
Шлюз успешно сбалансирован в пользовательском сервере и вернул ОК. Заголовок ответа содержит глобальные настройки фильтра x-response-default-foo: по умолчанию-bar
Суммировать
В этой статье мы исследуем некоторые функции и компоненты, которые принадлежат Spring Cloud Gateway. Этот новый API предоставляет инвестиционные инструменты для поддержки шлюза и прокси. С нетерпением жду официальной версии Spring Cloud Gateway 2.0.
Адрес исходного кода
https://github.com/keets2012/spring-cloud_samples
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.