Рубрики
Без рубрики

Изучение нового шлюза Spring Cloud Gateway

Узнайте об основных функциях проекта Spring Cloud Gateway.

Автор оригинала: baeldung.

1. Обзор

В этой статье мы рассмотрим основные функции проекта Spring Cloud Gateway , нового API, основанного на Spring 5, Spring Boot 2 и Project Reactor.

Инструмент предоставляет готовые механизмы маршрутизации, часто используемые в приложениях микросервисов, чтобы скрыть несколько служб за одним фасадом.

Для объяснения шаблона шлюза без проекта Spring Cloud Gateway ознакомьтесь с нашей предыдущей статьей .

2. Обработчик маршрутизации

Ориентируясь на запросы маршрутизации, шлюз Spring Cloud перенаправляет запросы на сопоставление обработчика шлюза, которое определяет, что следует делать с запросами, соответствующими определенному маршруту.

Давайте начнем с краткого примера того, как обработчик шлюза разрешает конфигурации маршрутизатора с помощью Route Locator:

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
      .route("r1", r -> r.host("**.baeldung.com")
        .and()
        .path("/baeldung")
        .uri("http://baeldung.com"))
      .route(r -> r.host("**.baeldung.com")
        .and()
        .path("/myOtherRouting")
        .filters(f -> f.prefixPath("/myPrefix"))
        .uri("http://othersite.com")
        .id("myOtherID"))
    .build();
}

Обратите внимание, как мы использовали основные строительные блоки этого API:

  • Маршрут – основной API шлюза. Он определяется заданной идентификацией (ID), назначением (URI) и набором предикатов и фильтров
  • Предикат – Предикат Java 8– , который используется для сопоставления HTTP-запросов с использованием заголовков, методов или параметров Фильтр –
  • стандартный пружинный Веб-фильтр

3. Динамическая маршрутизация

Как и Zuul , Spring Cloud Gateway предоставляет средства для маршрутизации запросов к различным службам.

Конфигурация маршрутизации может быть создана с помощью чистой Java ( Route Locator , как показано в примере в разделе 2.1) или с помощью конфигурации свойств:

spring:
  application:
    name: gateway-service  
  cloud:
    gateway:
      routes:
      - id: baeldung
        uri: baeldung.com
      - id: myOtherRouting
        uri: localhost:9999

4. Маршрутизация фабрик

Spring Cloud Gateway сопоставляет маршруты с помощью Spring Web Flux Сопоставление обработчиков инфраструктура.

Он также включает в себя множество встроенных фабрик предикатов маршрутов. Все эти предикаты соответствуют различным атрибутам HTTP-запроса. Несколько фабрик предикатов маршрута могут быть объединены с помощью логического “и”.

Сопоставление маршрутов может быть применено как программно, так и с помощью файла свойств конфигурации с использованием другого типа фабрик предикатов маршрутов.

В нашей статье Spring Cloud Gateway Routing Predicate Factories более подробно рассматриваются фабрики маршрутизации.

5. Фабрики веб-фильтров

Фильтры маршрутов позволяют изменять входящий HTTP-запрос или исходящий HTTP-ответ.

Spring Cloud Gateway включает в себя множество встроенных фабрик веб-фильтров, а также возможность создания пользовательских фильтров.

В нашей статье Spring Cloud Gateway Web Filter Factories более подробно рассматриваются фабрики веб-фильтров.

6. Поддержка клиентов Spring Cloud Discovery

Spring Cloud Gateway можно легко интегрировать с библиотеками обнаружения служб и реестров, такими как Eureka Server и Consul:

@Configuration
@EnableDiscoveryClient
public class GatewayDiscoveryConfiguration {
 
    @Bean
    public DiscoveryClientRouteDefinitionLocator 
      discoveryClientRouteLocator(DiscoveryClient discoveryClient) {
 
        return new DiscoveryClientRouteDefinitionLocator(discoveryClient);
    }
}

6.1. Фильтр клиента LoadBalancer

Клиентский фильтр LoadBalancer ищет URL-адрес в свойстве атрибута exchange с помощью Server Web Exchange Utils.GATEWAY_REQUEST_URL_ATTR.

Если URL-адрес имеет схему lb (например, lb://baeldung-service) , он будет использовать клиент Spring Cloud LoadBalancer для разрешения имени (т. Е. baeldung-service) на фактический хост и порт.

Неизмененный исходный URL-адрес помещается в Utils Server Web Exchange.GATEWAY_ORIGINAL_REQUEST_URL_ATTR атрибут.

7. Мониторинг

Spring Cloud Gateway использует API привода, хорошо известную библиотеку Spring-Boot, которая предоставляет несколько готовых сервисов для мониторинга приложения.

После установки и настройки API привода функции мониторинга шлюза можно визуализировать, обратившись к /gateway/ endpoint.

8. Реализация

Теперь мы создадим простой пример использования Spring Cloud Gateway в качестве прокси-сервера с использованием предиката path .

Теперь мы создадим простой пример использования Spring Cloud Gateway в качестве прокси-сервера с использованием предиката || path||.

Шлюз Spring Cloud в настоящее время находится в репозитории milestones версии 2.0.0.RC2. Это также версия, которую мы используем здесь.

Чтобы добавить проект, мы будем использовать систему управления зависимостями:


    
        
            org.springframework.cloud
            spring-cloud-gateway
            2.0.0.RC2
            pom
            import
        
    

Далее мы добавим необходимые зависимости:


    org.springframework.boot
    spring-boot-actuator


    org.springframework.boot
    spring-boot-starter-webflux


    org.springframework.cloud
    spring-cloud-starter-gateway

8.2. Реализация кода

А теперь мы создаем простую конфигурацию маршрутизации в файле application.yml :

spring:
  cloud:
    gateway:
      routes:
      - id: baeldung_route
        uri: http://baeldung.com
        predicates:
        - Path=/baeldung/
management:
  endpoints:
    web:
      exposure:
        include: "*'

И код приложения шлюза:

@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

После запуска приложения мы можем получить доступ к URL-адресу: “http://localhost/actuator/gateway/routes/baeldung_route” для проверки всех созданных конфигураций маршрутизации:

{
    "id":"baeldung_route",
    "predicates":[{
        "name":"Path",
        "args":{"_genkey_0":"/baeldung"}
    }],
    "filters":[],
    "uri":"http://baeldung.com",
    "order":0
}

Мы видим, что относительный URL: “/baeldung” настроен как маршрут, поэтому попадание по URL “http://localhost/baeldung” мы будем перенаправлены на ” http://baeldung.com “, как было настроено в нашем примере.

9. Заключение

В этой статье мы рассмотрели некоторые функции и компоненты, входящие в состав Spring Cloud Gateway. Этот новый API предоставляет готовые инструменты для поддержки шлюза и прокси-сервера.

Примеры, представленные здесь, можно найти в нашем репозитории GitHub .