Spring Cloud Gateway можно считать преемником проекта Spring Cloud Netflix Zuul и помогает в реализации шаблона Gateway в среде микросервисов. Он построен на вершине
Spring Boot 2 и Spring Webflux являются неблокирующими от начала до конца — он предоставляет сервер на базе Netty, использует клиент на основе Netty для выполнения последующих вызовов микросервиса и использует ядро реактора для остальной части потока.
Моя цель — показать, как небольшой маршрут на основе Spring Cloud Netflix Zuul может быть переведен несколькими способами с помощью Spring Cloud Gateway.
Весеннее Облако Netflix Zuul
Spring Cloud Zuul позволяет настраивать простые правила маршрутизации, используя файлы свойств, выраженные здесь как yaml:
|
1
2
3
4
5
6
|
zuul: routes: sample: path: /zuul/** url: http://httpbin.org:80 strip-prefix: true |
Этот маршрут предоставил бы конечную точку в Zuul, которая перехватывает любые запросы, сделанные к URI с префиксом «/ zuul», и перенаправляет его в систему ниже по потоку после удаления префикса «zuul».
Spring Cloud Gateway
Spring Cloud Gateway позволяет кодировать эквивалентную функциональность тремя способами — с помощью DSL на основе Java, с использованием DSL на основе Kotlin и с помощью простой конфигурации на основе свойств.
Начальный проект может быть создан с использованием отличного сайта http://start.spring.io:
Java на основе DSL
На основе Java dsl, который создает маршрут, аналогичный маршруту Zuul, выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GatewayRoutes { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/java/**") .filters( f -> f.stripPrefix(1) ) ) .build(); }} |
Это читаемый DSL, который настраивает маршрут, который перехватывает URI с префиксом «java» и отправляет его в нижестоящую систему после удаления этого префикса.
Котлин на базе DSL
DSL на основе Kotlin для настройки этого маршрута выглядит следующим образом.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
import org.springframework.cloud.gateway.route.RouteLocatorimport org.springframework.cloud.gateway.route.builder.RouteLocatorBuilderimport org.springframework.cloud.gateway.route.builder.filtersimport org.springframework.cloud.gateway.route.builder.routesimport org.springframework.context.annotation.Beanimport org.springframework.context.annotation.Configuration@Configurationclass KotlinRoutes { @Bean fun kotlinBasedRoutes(routeLocatorBuilder: RouteLocatorBuilder): RouteLocator = routeLocatorBuilder.routes { route { path("/kotlin/**") filters { stripPrefix(1) } } }} |
Первоначально я представил PR для основанного на Kotlin DSL для маршрутов Spring Cloud Gateway, и поэтому я склонен использовать Kotlin для настройки Spring Cloud Gateway :-). Маршрут принимает URL-адреса с префиксом «kotlin» и удаляет их перед выполнением последующего вызова микросервиса.
Недвижимость на основе маршрута
И, наконец, свойство на основе одного:
|
1
2
3
4
5
6
7
8
9
|
spring: cloud: gateway: routes: - predicates: - Path=/props/** filters: - StripPrefix=1 |
Этот маршрут, такой как версии Java и Kotlin, принимает URL с префиксом «props» и удаляет этот префикс перед выполнением последующего вызова. Версия на основе свойств имеет дополнительное преимущество, заключающееся в возможности обновления во время выполнения.
Вывод
Это очень краткое введение в Spring Cloud Gateway, в котором сравнивается, как типичная конфигурация из Spring Cloud Netflix Zuul отображается на Spring Cloud Gateway.
| Смотреть оригинальную статью здесь: Spring Cloud Gateway — Настройка простого маршрута
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |

