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; @Configuration public 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.RouteLocator import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder import org.springframework.cloud.gateway.route.builder.filters import org.springframework.cloud.gateway.route.builder.routes import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @Configuration class 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, являются их собственными. |