[springcloud microservices] Шлюз микросервисов Spring Cloud Сведения об использовании шлюза

Оглавление

1. Введение в микросервисный шлюз

1.1 Роль шлюза

1.2 Общие шлюзы

1.2.1 Традиционный шлюз

1.2.2 Облачный шлюз

2. Введение шлюза шлюза

2.1 Происхождение проблемы

2.2 Поднятые вопросы

2.2.1 Новое изобретение колеса

2.2.2 Неэффективность вызова

2.2.3 Комплексный рефакторинг

2.3 улучшение шлюза

3. Введение в Spring Cloud Gateway

3.1 Обзор шлюза

3.2 Функции шлюза

3.3 Основная концепция шлюза

3.3.1 Маршрутизация (маршрут)

3.3.2 предикаты 

3.3.3 Фильтр

3.4 Принцип работы шлюза

4. Быстрое использование шлюза

4.1 Этапы работы

4.1.1 Импорт зависимостей maven

4.1.2 Добавить файл конфигурации

4.1.3 Запустите службу и проверьте

4.2 Интеграция нако

4.2.1 Знакомство с зависимостями nacos

4.2.2 Изменить файл конфигурации

4.2.3 Проверка эффекта

4.3 Интеграция автоматического обнаружения сервисов nacos

5. Фабрика утверждений маршрутизации шлюза

5.1 Общие фабрики утверждений маршрутизации

5.1.1 Фабрика утверждений на основе типа Datetime

5.1.2 Фабрики утверждений на основе удаленных адресов

5.1.3 Фабрика утверждений на основе файлов cookie

5.1.4 Фабрика утверждений на основе заголовков

5.1.5 Фабрика утверждений на основе хоста

5.1.6 Фабрика утверждений на основе метода запроса метода

5.1.7 Фабрика утверждений на основе пути запроса Path

5.1.8 Фабрика утверждений на основе параметров запроса Query

5.1.9 Фабрика утверждений на основе веса маршрута

5.2 Использование фабрики утверждений маршрутизации

5.2.1 Утверждения времени

5.2.2 утверждение заголовка

5.2.3 Утверждение параметра запроса запроса

5.3 Фабрика утверждения пользовательского маршрута

5.3.1 Класс фабрики утверждений пользовательской маршрутизации

5.3.2 Конфигурация пользовательских классов в файлы конфигурации

5.3.3 Проверка эффекта

 6. Фабрика шлюзовых фильтров

6.1 Использование шлюзового фильтра

6.1.1 Использование заголовка запроса

6.1.2 Использование параметров заголовка запроса

6.2 Фабрика пользовательских фильтров

6.2.1 Пользовательские классы фильтров

6.2.2 Изменить файл конфигурации

6.2.3 Тест интерфейса

6.3 Глобальные фильтры

6.3.1 Обзор

6.3.2 Глобальная классификация фильтров

6.3.3 Использование глобального фильтра

6.3.4 Тест интерфейса

7. Междоменные настройки шлюза

 7.1 Рабочий процесс

7.1.1 Изменить файл конфигурации

Восемь, написанная в конце текста


1. Введение в микросервисный шлюз

В зрелой и стабильной микросервисной архитектуре, чтобы защитить безопасность внутреннего интерфейса и избежать раскрытия реального адреса интерфейса, обычно до того, как запрос достигнет интерфейса, он проходит через уровень обслуживания, называемый «шлюзом», прокси-сервером. и вперед через шлюз, а потом на бэкэнд, это то, что делает шлюз. Например, можно сказать, что в продуктах интернет-компаний используются привычные nginx, gateway, zuul и т. д. Каковы функции шлюзов?

1.1 Роль шлюза

Можно сказать, что шлюз играет очень важную роль в системе:

  • Скрыть реальный адрес API от внешнего мира, чтобы защитить безопасность ресурсов API;
  • Выявление и перехват вредоносных запросов, предварительная фильтрация и аудит запросов;
  • Вход несущего трафика перенаправляет запрошенный трафик в соответствии с нагрузкой на систему;

1.2 Общие шлюзы

По мере того, как микросервисная архитектура становится все более распространенной, шлюзы играют все более важную роль в архитектуре исправления.С появлением облачных и крупномасштабных внедрений постепенно начали появляться различные новые типы шлюзов.

1.2.1 Традиционный шлюз

В системе микросервисов springcloud можно рассматривать традиционные шлюзы следующим образом:

  • nginx;
  • зул;
  • шлюз;

1.2.2 Облачный шлюз

С широкомасштабным применением k8s также начали появляться некоторые связанные шлюзы, такие как:

  • вход;
  • истио (посланник);
  • API-шлюз;
  • конг;
  • апикс...

2. Введение шлюза шлюза

2.1 Происхождение проблемы

В микросервисной архитектуре система разделена на множество микросервисов. Итак, как вызвать столько микросервисов в качестве клиента? Если нет шлюза, мы можем только записать адрес каждого микросервиса на клиенте и использовать его отдельно.

2.2 Поднятые вопросы

Есть много проблем с вышеуказанной структурой:

2.2.1 Новое изобретение колеса

Каждый бизнес должен выполнять логику, такую ​​как аутентификация, ограничение тока, проверка полномочий, кросс-доменность и т. д., независимо, и каждый бизнес борется сам по себе, создавая свои собственные колеса для достижения этого;

2.2.2 Неэффективность вызова

Если бизнес-объем относительно прост, пока проблем не будет. По мере того, как бизнес становится все более и более сложным, сложная страница может включать в себя сотни микросервисов, работающих вместе. Если каждому микросервису будет присвоено доменное имя, на одном С другой стороны, клиентский код будет сложно поддерживать, включая сотни доменных имен.С другой стороны, это узкое место количества подключений.Представьте, что вы открываете приложение и обнаруживаете, что через перехват пакетов задействованы сотни удаленных вызовов. , было бы очень неэффективно;

2.2.3 Комплексный рефакторинг

Если вам нужно провести рефакторинг микросервисов на более позднем этапе, это также станет очень хлопотным.Вам нужно, чтобы клиент сотрудничал с вами в преобразовании, например, товарных услуг.По мере того, как бизнес становится все более и более сложным, его необходимо разделить на несколько микросервисов позже Услуги, в это время услуги, предоставляемые внешнему миру, также должны быть разделены на несколько частей, и в то же время клиент должен сотрудничать с вами в преобразовании, что очень болезненно;

2.3 улучшение шлюза

Для решения вышеуказанных проблем можно использовать API-шлюз.

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

После добавления шлюза API схема архитектуры системы становится следующей

3. Введение в Spring Cloud Gateway

3.1 Обзор шлюза

  • Это платформа шлюза второго поколения, официально запущенная Spring Cloud и призванная заменить Netflix Zuul1.0. По сравнению с Zuul Spring Cloud Gateway обеспечивает лучшую производительность и более мощные функции;
  • Это отзывчивый API-шлюз, реализованный WebFlux + Netty + Reactor. Он не работает в традиционном контейнере сервлетов и не может быть встроен в военный пакет;
  • Он призван предоставить простой и эффективный метод управления маршрутизацией API для микросервисной архитектуры и предоставить основные функции шлюза на основе метода фильтра, такие как аутентификация безопасности, мониторинг, ограничение тока и т. д.;

3.2 Функции шлюза

По сравнению со шлюзом zuul первого поколения шлюз предоставляет богатые и мощные функции;

1) Сборка на основе Spring Framework 5, Project Reactor и Spring Boot 2.0;

2) динамическая маршрутизация: возможность соответствия любому атрибуту запроса;

3) Поддержка перезаписи пути;

4) Интеграция функции обнаружения службы Spring Cloud (Nacos, Eureka);

5) Может быть интегрирована функция понижения уровня управления потоком (Sentinel, Hystrix);

6) Вы можете указать простой в написании Predicate (утверждение) и Filter (фильтр) для маршрутизации;

3.3 Основная концепция шлюза

3.3.1  Маршрутизация (маршрут)

Маршрутизация является основной частью шлюза.Информация о маршрутизации включает в себя идентификатор, URI назначения, набор фабрик утверждений и набор фильтров. Если утверждение истинно, запрошенный URL-адрес соответствует настроенному маршруту.

3.3.2  предикаты 

Функция утверждения в Java8, тип функции утверждения в SpringCloud Gateway — это ServerWebExchange в среде Spring5.0. Функция утверждения позволяет разработчикам определять любую информацию, которая соответствует запросу Http, например заголовки и параметры запроса.

3.3.3 Фильтр

Фильтры в SpringCloud Gateway делятся на Gateway FilIer и Global Filter. Фильтр может обрабатывать запросы и ответы.

3.4 Принцип работы шлюза

Согласно приведенному выше рисунку рабочий процесс шлюза выглядит примерно следующим образом:

  • Клиент шлюза отправляет запрос серверу шлюза;
  • Сначала запрос будет извлечен и собран в контекст шлюза HttpWebHandlerAdapter;
  • Затем контекст шлюза будет передан DispatcherHandler, который отвечает за отправку запроса в RoutePredicateHandlerMapping;
  • RoutePredicateHandlerMapping отвечает за поиск маршрута и определяет, доступен ли маршрут в соответствии с утверждением маршрута;
  • Если утверждение выполняется успешно, цепочка фильтров создается и вызывается FilteringWebHandler;
  • Запрос пройдет через метод PreFilter--microservice--PostFilter один раз и, наконец, вернет ответ;

4. Быстрое использование шлюза

Далее быстро испытайте использование шлюза через кейс

4.1 Этапы работы

4.1.1 Импорт зависимостей maven

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

4.1.2 Добавить файл конфигурации

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


server:
  port: 8088

spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        #当前路由的唯一标识,路由到哪个服务上面去
        - id: order-route
          uri: http://localhost:8083
          predicates:
            #即所有以order-serv开头的请求都转发到这个微服务处理
            - Path=/order-serv/**
          filters:
            #访问的时候,Gateway会自动的把order-serv过滤掉,从而转发到对应微服务的正确路径上
            #比如客户端访问的是 http://localhost:8088/order-serv/order/add,通过gateway之后实际访问的是http://localhost:8088/order/add
            - StripPrefix=1

4.1.3 Запустите службу и проверьте

@SpringBootApplication
public class GatewayApp01 {

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

Перед запуском модуля заказа и модуля запаса в модуле заказа есть интерфейс /order/add.В соответствии с приведенной выше конфигурацией наш доступ должен быть переадресован шлюзом, поэтому полный адрес запроса: http://localhost :8088/ order -serv/order/add , если доступ к этому адресу может иметь тот же эффект, что и доступ к: http://localhost:8083/order/add  , это означает, что конфигурация шлюза вступила в силу, и эффект интерфейса доступа к браузеру выглядит следующим образом:

4.2 Интеграция нако

В приведенном выше конфигурационном файле можно обнаружить, что адрес пути переадресации шлюза прописан непосредственно в конфигурационном файле.Этот метод не стандартизирован и вызовет много проблем.Правильный и разумный способ - переадресация через указанное имя службы Далее используйте nacos в качестве регистрационного центра, чтобы получить этот адрес из регистрационного центра;

4.2.1 Знакомство с зависимостями nacos

       <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

4.2.2 Изменить файл конфигурации

Есть два основных момента, один - добавить адрес nacos, но изменить перенаправленный uri-адрес на имя службы на nacos


server:
  port: 8088

spring:
  application:
    name: api-gateway

  # nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址

    gateway:
      routes:
        #当前路由的唯一标识,路由到哪个服务上面去
        - id: order-route
          uri: lb://order-service #需要转发的服务地址,nacos上注册的那个服务地址
          predicates:
            #即所有以order-serv开头的请求都转发到这个微服务处理
            - Path=/order-serv/**
          filters:
            #访问的时候,Gateway会自动的把pay过滤掉,从而转发到对应微服务的正确路径上
            #比如客户端访问的是 http://localhost:8088/order-serv/order/add,实际访问的是http://localhost:8088/order/add
            - StripPrefix=1

4.2.3 Проверка эффекта

После запуска сервисов нескольких модулей снова вызвать тот же интерфейс, что согласуется с вышеуказанным эффектом

4.3 Интеграция автоматического обнаружения сервисов nacos

Основываясь на интеграции nacos, файл конфигурации шлюза может быть дополнительно упрощен следующим образом: благодаря этой конфигурации, когда адрес запроса: /order-service/order/add interface, он автоматически переходит к nacos, чтобы узнать, такая услуга существует;


server:
  port: 8088

spring:
  application:
    name: api-gateway

  # nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址

    gateway:
      discovery:
        locator:
          enabled: true #是否启动自动发现nacos上面的服务

После запуска службы и повторного тестирования правильный результат возврата все еще можно получить;

5. Фабрика утверждений маршрутизации шлюза

Шлюз обеспечивает настройку фабрики утверждений маршрутизации, что делает обработку запросов более богатой и гибкой.Разработчикам нужно только установить некоторые правила в файле конфигурации в соответствии с бизнес-сценарием. Spring Cloud Gateway включает в себя ряд встроенных фабрик утверждений, каждая из которых соответствует различным атрибутам HTTP-запросов, а именно:

5.1 Общие фабрики утверждений маршрутизации

5.1.1  Фабрика утверждений на основе типа Datetime

Этот тип утверждения оценивается на основе времени, и существует три основных типа:

  • AfterRoutePredicateFactory: получить параметр даты, чтобы определить, является ли запрошенная дата более поздней, чем указанная дата;
  • BeforeRoutePredicateFactory: получите параметр даты, чтобы определить, является ли запрошенная дата более ранней, чем указанная дата;
  • МеждуRoutePredicateFactory: получение двух параметров даты, чтобы определить, соответствует ли запрошенная дата указанному периоду времени.

 ‐ После=2022-12-29T23:59:59.789+08:00[Азия/Шанхай]

5.1.2 Фабрики утверждений на основе удаленных адресов

RemoteAddrRoutePredicateFactory: получение сегмента IP-адреса и определение того, находится ли запрашивающий адрес хоста в сегменте адреса.

 - RemoteAddr=192.168.1.1/24

5.1.3 Фабрика утверждений на основе файлов cookie

CookieRoutePredicateFactory: получает два параметра: имя файла cookie и регулярное выражение. Определите, имеет ли файл cookie запроса заданное имя и значение, соответствующее регулярному выражению.

‐Cookie=китай, ch

5.1.4 Фабрика утверждений на основе заголовков

HeaderRoutePredicateFactory: получает два параметра, имя заголовка и регулярное выражение. Определите, имеет ли заголовок запроса заданное имя и соответствует ли значение регулярному выражению.

‐Заголовок=X‐Идентификатор Запроса, \d+

5.1.5 Фабрика утверждений на основе хоста

HostRoutePredicateFactory: получает один параметр — шаблон имени хоста. Определить, соответствует ли запрошенный хост правилам сопоставления

‐Host=**.testhost.org

5.1.6 Фабрика утверждений на основе метода запроса метода

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

- Метод = ПОЛУЧИТЬ

5.1.7 Фабрика утверждений на основе пути запроса Path

PathRoutePredicateFactory: получите параметр, чтобы определить, удовлетворяет ли часть URI запроса правилам пути.

‐Путь=/foo/{сегмент}

5.1.8 Фабрика утверждений на основе параметров запроса Query

QueryRoutePredicateFactory: получить два параметра, параметр запроса и регулярное выражение, определить, имеет ли параметр запроса заданное имя и соответствует ли значение регулярному выражению.

‐Query=баз, ба.

5.1.9 Фабрика утверждений на основе веса маршрута

WeightRoutePredicateFactory: получить [имя группы, вес], а затем перенаправить маршруты в той же группе в соответствии с весом

routes:
 ‐id: weight_route1
  uri: host1
  predicates:
 ‐Path=/product/**
 ‐Weight=group3, 1
 ‐id: weight_route2
  uri: host2
  predicates:
 ‐Path=/product/**
 ‐Weight= group3, 9

5.2 Использование фабрики утверждений маршрутизации

5.2.1 Утверждения времени

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


server:
  port: 8088

spring:
  application:
    name: api-gateway

  # nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

    gateway:
      routes:
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/order/**
            - After=2022-12-29T23:59:59.789+08:00[Asia/Shanghai]

Начните снова и получите доступ к интерфейсу, увидите следующий эффект

5.2.2 утверждение заголовка

Добавьте следующую конфигурацию, которая означает, что заголовок запроса также должен содержать параметр, ключ которого — имя пользователя, а значение — jerry.


server:
  port: 8088

spring:
  application:
    name: api-gateway

  # nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

    gateway:
      routes:
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/order/**
            - After=2022-12-29T23:59:59.789+08:00[Asia/Shanghai]
            - Header=username,jerry

Инициируйте запрос через почтальона, вы можете увидеть следующий эффект

Если параметры в шапке удалены или написаны неправильно, появится 404;

5.2.3 Утверждение параметра запроса запроса

Добавьте следующую конфигурацию, то есть запрос должен нести параметр name

server:
  port: 8088

spring:
  application:
    name: api-gateway

  # nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

    gateway:
      routes:
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/order/**
            - After=2022-12-29T23:59:59.789+08:00[Asia/Shanghai]
            #- Header=username,jerry
            - Query=name

Запросите интерфейс еще раз, если вы не носите имя, вы увидите запрос 404

после ношения имени

5.3 Фабрика утверждения пользовательского маршрута

Если встроенная фабрика утверждений маршрутизации по-прежнему не может удовлетворить ваши индивидуальные потребности, вы можете рассмотреть возможность настройки фабрики утверждений маршрутизации.

Настраиваемая фабрика утверждений маршрутизации должна наследовать класс AbstractRoutePredicateFactory и переписать логику метода применения. В методе применения вы можете получить объект ServerHttpRequest через exchange.getRequest(), чтобы получить запрошенные параметры, метод запроса, заголовок запроса и другую информацию.

На что обратить внимание для пользовательских фабрик утверждений маршрутизации:

  • Должен быть bean-компонентом Spring;
  •  Класс должен заканчиваться RoutePredicateFactory;
  • AbstractRoutePredicateFactory должен быть унаследован;
  •  Должен быть объявлен статический внутренний класс, а свойства должны быть объявлены для получения информации о соответствующем утверждении в файле конфигурации;
  • Он должен быть связан с ярлыкомFieldOrder;
  • Сделайте логический вывод с помощью команды «применить», значение «истина» означает, что совпадение выполнено успешно, а значение «ложь» означает, что совпадение не выполнено;

5.3.1 Класс фабрики утверждений пользовательской маршрутизации

@Component
public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {

    public CheckAuthRoutePredicateFactory() {
        super(CheckAuthRoutePredicateFactory.Config.class);
    }

    public List<String> shortcutFieldOrder() {
        return Arrays.asList("name");
    }

    public Predicate<ServerWebExchange> apply(CheckAuthRoutePredicateFactory.Config config) {
        return new GatewayPredicate() {
            public boolean test(ServerWebExchange exchange) {
                if(config.getName().equals("hello")){
                    return true;
                }
                return false;
            }
        };
    }

    //接受配置文件中中的参数
    @Validated
    @Data
    public static class Config {

        private String name;

    }
}

5.3.2 Конфигурация пользовательских классов в файлы конфигурации

5.3.3 Проверка эффекта

После запуска службы связанного модуля снова вызовите интерфейс, и вы увидите следующий эффект.

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

 

Протестируйте интерфейс еще раз, вы можете увидеть следующий эффект

 6. Фабрика шлюзовых фильтров

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

Наличие и использование фильтров позволяет более тщательно контролировать исходные запросы для достижения цели защиты ресурсов интерфейса сервера.

6.1 Использование шлюзового фильтра

6.1.1 Использование заголовка запроса

Функция: добавить заголовок для исходного запроса, соответствующий завод фильтров: AddRequestHeader, изменить файл конфигурации


server:
  port: 8088

spring:
  application:
    name: api-gateway

  # nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

    gateway:
      routes:
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/order/**
            - After=2022-12-29T23:59:59.789+08:00[Asia/Shanghai]
            #- Header=username,jerry
            #- Query=name
            #- CheckAuth=jerry
          filters:
            - AddRequestHeader=X-Request-color,red

Добавьте следующий тестовый интерфейс в OrderController

    @GetMapping("/header")
    public String header(@RequestHeader("X-Request-color") String color){
        return color;
    }

Интерфейс запроса браузера, вы можете увидеть следующий эффект, указывающий, что запрос, перенаправленный из шлюза, имеет красный параметр;

6.1.2 Использование параметров заголовка запроса

Добавьте следующие параметры конфигурации

Добавьте тестовый интерфейс в OrderController

    @GetMapping("/request-param")
    public String testRequestParam(@RequestParam("color")String color) throws Exception {
        logger.info("获取请求参数:" + color);
        return color;
    }

Протестируйте интерфейс, вы можете увидеть следующие эффекты

6.2 Так как

6.2 Фабрика пользовательских фильтров

В некоторых случаях, если встроенный фильтр шлюза не соответствует требованиям, можно рассмотреть настраиваемые фильтры, которые относительно просты в использовании, настраиваемые классы и наследовать AbstractNameValueGatewayFilterFactory, при этом имя настраиваемого класса должно заканчиваться на GatewayFilterFactory и Hand over to пружинное управление;

6.2.1 Пользовательские классы фильтров

@Component
public class CheckAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CheckAuthGatewayFilterFactory.Config> {

    public CheckAuthGatewayFilterFactory() {
        super(CheckAuthGatewayFilterFactory.Config.class);
    }

    public List<String> shortcutFieldOrder() {
        return Arrays.asList("name");
    }

    public GatewayFilter apply(CheckAuthGatewayFilterFactory.Config config) {
        return (exchange, chain) -> {
            String paramValue = exchange.getRequest().getQueryParams().getFirst("name");
            if (StringUtils.isNotEmpty(paramValue) && paramValue.equals("jerry")) {
                return chain.filter(exchange);
            } else {
                exchange.getResponse().setStatusCode(HttpStatus.NOT_FOUND);
                return  exchange.getResponse().setComplete();
            }
            
        };
    }

    @Data
    public static class Config {
        private String name;
    }
}

6.2.2 Изменить файл конфигурации

6.2.3 Тест интерфейса

Запустите службу связанного модуля, вызовите интерфейс /order/add через шлюз, если параметр имени передан и значение правильное.

 Если значение неверное, появится следующий эффект

6.3 Глобальные фильтры

Вышеуказанные фильтры можно рассматривать как частичные фильтры в соответствии с классификацией.Локальный фильтр необходимо настроить в маршруте для определенного маршрута.Однако, если в реальном бизнесе необходимо контролировать много маршрутов, необходимо напишите много локальных фильтров.Фильтры, особенно те сцены, которые имеют одинаковую потребность в фильтрации, являются избыточными.В это время можно рассмотреть возможность использования глобальных фильтров

6.3.1 Обзор

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

6.3.2 Глобальная классификация фильтров

Ниже перечислены официальные и часто используемые глобальные фильтры шлюза.

6.3.3 Использование глобального фильтра

Настройте класс для реализации интерфейса GlobalFilter.

@Component
@Slf4j
public class LogFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info(exchange.getRequest().getPath().value());
        return chain.filter(exchange);
    }
}

6.3.4 Тест интерфейса

После запуска соответствующих служб модуля откройте вышеуказанный интерфейс, и вы увидите, что консоль выводит запрошенную информацию о пути;

7. Междоменные настройки шлюза

Концепция пересечения знакома многим студентам.Существует много решений для перекрестных доменов.Например,настройка в nginxявляется относительно распространенной.Шлюз также предоставляет решения для перекрестных доменов.

è¿éæå¥å¾çæè¿°

 7.1 Рабочий процесс

Официальный документ: руководство по междоменной настройке шлюза

7.1.1 Изменить файл конфигурации

Добавить информацию о междоменной конфигурации

server:
  port: 8088

spring:
  application:
    name: api-gateway

  # nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

    gateway:
      # ----------- 跨域相关的配置
      globalcors:
        cors-configurations:
          '[/**]':  #拦截的请求
            allowedOrigins: #允许跨域的请求来源
              - "http://localhost:8080"
            allowedMethods: #运行跨域的请求方式
              - "GET"
              - "POST"
      routes:
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/order/**
            - After=2022-12-29T23:59:59.789+08:00[Asia/Shanghai]
            #- Header=username,jerry
            #- Query=name
            #- CheckAuth=jerry
          filters:
            #- AddRequestHeader=X-Request-color,red
            #- AddRequestParameter=color,blue
            - CheckAuth=name,jerry

Восемь, написанная в конце текста

В этой статье подробно объясняется использование шлюза в большом пространстве.Для получения дополнительной информации об использовании шлюза вы можете обратиться к официальным документам веб-сайта для обучения, например, использование шлюза для единой аутентификации, ограничение тока и т. д., как отличный программируемый сервисный шлюз, его необходимо тщательно изучить и понять, прежде чем его можно будет разумно использовать при проектировании архитектуры.

рекомендация

отblog.csdn.net/congge_study/article/details/129892885
рекомендация