Статьи

Spring Cloud Gateway — Настройка простого маршрута

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)
                                )
                                .uri("http://httpbin.org:80")
                )
                .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) }
                    uri("http://httpbin.org")
                }
            }
}

Первоначально я представил 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
          uri: "http://httpbin.org"

Этот маршрут, такой как версии Java и Kotlin, принимает URL с префиксом «props» и удаляет этот префикс перед выполнением последующего вызова. Версия на основе свойств имеет дополнительное преимущество, заключающееся в возможности обновления во время выполнения.

Вывод

Это очень краткое введение в Spring Cloud Gateway, в котором сравнивается, как типичная конфигурация из Spring Cloud Netflix Zuul отображается на Spring Cloud Gateway.

Смотреть оригинальную статью здесь: Spring Cloud Gateway — Настройка простого маршрута

Мнения, высказанные участниками Java Code Geeks, являются их собственными.