Spring Cloud 2.x реализует проект шлюза микросервисов Spring CloudGateway (сокращенно SCG) в рамках экосистемы сообщества. Spring Cloud Gateway разработан на основе платформы WebFlux и призван заменить Zuul.
Spring Cloud Gateway имеет две основные функции:
① Неблокируемый RxNetty по умолчанию используется в качестве адаптивного веб-контейнера. В неблокирующем режиме используется меньше потоков и ресурсов для обработки параллельных запросов и улучшения масштабируемости использования ресурсов службы.
②Конечная точка функционального программирования: использование модели функционального программирования Spring WebFlux для определения конечных точек маршрутизации и обработки запросов.
Spring Cloud Gateway можно использовать с Eureka, Ribbon, Hystrix и другими компонентами. Он построен на основе Spring 5 Reactor и Spring Boot 2. Он использует Netty в качестве базовой среды связи, поддерживает модели асинхронного неблокирующего программирования и среды реактивного программирования. и решает проблемы инфраструктуры Zuul, связанные с блокировкой ввода-вывода и проблемами конвергенции потоков. Использование инфраструктуры Spring WebFlux может позволить Spring Cloud Gateway повысить производительность и занимать меньше ресурсов в сценариях с высоким уровнем параллелизма.
Ниже приводится официальное введение Spring Cloud в функции Spring Cloud Gateway.
● На основе Spring Framework 5, Reactor и Spring Boot 2.0.
● Соответствующий маршрут может быть сопоставлен в соответствии с запрошенными атрибутами.
● Интегрируйте Hystrix.
● Интегрируйте Spring Cloud DiscoveryClient.
● Применяйте простые в написании предикаты и фильтры к конкретным маршрутам.
● Оснащен некоторыми расширенными функциями шлюза, такими как динамическая маршрутизация, ограничение тока и перезапись пути.
Для шлюзов микросервисов основные функции включают механизмы маршрутизации и фильтрации. С точки зрения функциональных возможностей Spring Cloud Gateway и Zuul имеют схожие функции. Все они могут интегрировать существующие компоненты Hystrix, балансировку нагрузки Ribbon и Spring Cloud для реализации дополнительных функций. Более того, основные характеристики Spring Cloud Gateway также отражены в базовой инфраструктуре связи. Он может реализовывать сетевую связь на основе механизма мультиплексирования ввода-вывода Netty и ответа на события. Другой его важной особенностью является использование ответов Spring Framework 5. Модель позволяет реализовать асинхронные неблокирующие функции с помощью Spring WebFlux, что качественно улучшило производительность и использование ресурсов. С точки зрения парадигмы программирования Spring CloudGateway использует режим функционального программирования. Официально предоставленная схема архитектуры Spring Cloud Gateway показана ниже.
Основные концепции Spring Cloud Gateway
Кратко объясните три термина на диаграмме архитектуры.
● Фильтр: концептуально аналогичный фильтру Zuul. Вы можете использовать фильтр для перехвата и изменения запросов, реализации ответов на восходящий поток, выполнения вторичной обработки и реализации сквозных функций, не имеющих ничего общего с приложением, таких как безопасность и тайм-аут доступа. Настройки, ограничение тока и другие функции.
● Маршрут: базовый компонент конфигурации шлюза, аналогичный модулю конфигурации маршрутизации Zuul. Модуль маршрута состоит из идентификатора, целевого URI, набора утверждений и набора фильтров. Если утверждение истинно, маршрут совпадает и осуществляется доступ к целевому URI.
● Предикат (утверждение). Предикат поступает из интерфейса Java 8, который можно использовать для сопоставления любого содержимого HTTP-запроса, например заголовков или параметров. Интерфейс содержит множество методов по умолчанию и объединяет предикаты в сложную логику (И, ИЛИ, НЕ), которую можно использовать для проверки параметров интерфейса, оценки маршрутизации и пересылки и т. д.
Доступ и настройка Spring Cloud Gateway
Spring Cloud Gateway использует среду выполнения Netty, предоставляемую Spring WebFlux, поэтому Spring Boot должен быть версии 2.0 или выше. После подтверждения базовой конфигурации среды Spring Cloud основные шаги доступа заключаются в следующем.
1. Введение в зависимости Maven
2. Метод настройки маршрутизации 1: метод файла конфигурации.
Значение каждого поля следующее.
● id: индивидуальный идентификатор маршрутизации, сохраняйте уникальность.
● uri: целевой адрес службы.
● предикаты: условия маршрутизации. Предикат принимает входной параметр и возвращает логический результат.
○ Первый предикат основан на URL-адресе. Первый маршрут в файле конфигурации настроен в режиме URL-адреса, а также настроено правило прокси-сервера URI с идентификатором url-proxy-1. Правила маршрутизации таковы: если адрес доступа http://localhost:8080/csdn/1.jsp, он будет перенаправлен на восходящий адрес https://localhost:8010/1.jsp. ○ Второй предикат основан на обнаружении идентификатора службы. В конфигурации второго маршрута в файле конфигурации используется метод обнаружения службы в сочетании с центром регистрации. По сравнению с конфигурацией маршрута с одним URI разница на самом деле очень мала, за исключением того, что протокол схемы URI отличается. Протокол схемы одного адреса URI, обычно протокол HTTP или HTTPs.
3. Доступ к конфигурации маршрутизации на основе метода кодового DSL.
Функцию маршрутизации и пересылки также можно реализовать с помощью кода. Мы можем добавить метод customRouteLocator в стартовый класс GatewayApplication для настройки правил пересылки. Код выглядит следующим образом:
После того как клиент отправляет HTTP-запрос к Spring Cloud Gateway, если GatewayHandlerMapping определяет, что запрос соответствует маршруту, он отправляет его в GatewayWebHandler. WebHandler обрабатывает запросы через цепочку фильтров, специфичных для этого запроса. Фильтры могут выполнять логику до или после отправки прокси-запроса. В процессе выполнения Spring CloudGateway сначала выполняется вся логика «предварительного фильтра», а затем выполняется прокси-сервер запроса возврата к источнику. После выполнения агента запроса выполняется логика «постфильтра». В фильтре типа «pre» можно реализовать проверку параметров, проверку разрешений, мониторинг трафика, вывод журнала, преобразование протокола и другие функции, в фильтре типа «post» можно реализовать модификацию содержимого ответа и заголовков ответа. вывод журнала, мониторинг трафика и другие функции. Основной рабочий процесс показан на рисунке ниже.
Условие предиката
В Spring Cloud Gateway Spring использует характеристики Predicate для реализации различных правил сопоставления маршрутов и сопоставляет соответствующие маршруты с помощью различных условий, таких как заголовок и параметры запроса.
Давайте рассмотрим несколько способов использования Predicate, встроенного в Spring Cloud Gateway.
существоватьвышесоответствовать Опубликовать тексткускисередина,если большедобрыйPredicatesтакой жечасжитьсуществовать Втакой жеодининдивидуальныйдорога Зависит от,пожалуйстапроситьдолжентакой жечасудовлетворить Местоиметьполоскакуски Только благодаря этомуиндивидуальныйдорога Зависит отживотноесоответствовать。когдаодининдивидуальныйпожалуйстапроситьудовлетворитьмногоиндивидуальныйдорога Зависит отиз Условие предикатачас,пожалуйстапросить Будет только побитиндивидуальныйуспехживотноесоответствоватьиздорога Зависит отизменятьволосы。Внизразличие лицаверно Неттакой жерегулированиеноиздорога Зависит отживотноесоответствовать Входить ХОРОШО объяснил.
● Сопоставление путем запроса пути (предикат маршрута пути).
Фабрика утверждения маршрутов получает параметр и определяет, соответствует ли URI, к которому осуществляется доступ, правилам, определенным Path. Пример конфигурации выглядит следующим образом:
Этот маршрут будет соответствовать, если путь запроса соответствует требованиям, например /hello/1 или /hello/world.
Используйте Curl для проверки, ввод командной строки:
После тестирования было обнаружено, что первая и вторая команды могут нормально получить возвращаемое значение страницы, а последняя команда сообщает об ошибке 404, что доказывает, что маршрут соответствует указанному пути.
● Сопоставление параметров запроса (предикат маршрута запроса).
Фабрика утверждений маршрутов принимает два параметра: обязательный параметр и необязательное регулярное выражение. Пример конфигурации выглядит следующим образом:
существоватьтакизсоответствоватьнаборсередина,Толькохотетьпожалуйстапроситьсередина Включатьhelloworldсвойствоизженьшеньчисло Прямо сейчас Можетживотноесоответствоватьдорога Зависит от。Используйте Curl для проверки, ввод командной строки:
После тестирования было обнаружено, что пока в запрос включен параметр helloworld, маршрут будет сопоставлен, но без параметра helloworld он не будет сопоставлен. Вы также можете настроить значение запроса в виде пар ключ-значение, чтобы и значение атрибута, и регулярное выражение сопоставлялись во время запроса, а логика маршрутизации корректно выполнялась только после сопоставления пар ключ-значение. .
существоватьвышедорога Зависит отживотноесоответствоватьсередина,пожалуйстапроситьсередина содержит атрибут hello и значение параметра число дакмир начинается с из, длина равна трем цифрам из строки,Только тогда Входить ХОРОШОживотноесоответствоватьидорога Зависит от。Используйте Curl для проверки, ввод командной строки:
Тест может вернуть правильный код страницы. Если вы измените значение атрибута hello на ok, при повторном доступе будет сообщено об ошибке 404, что доказывает, что маршрутизация должна соответствовать регулярному выражению перед маршрутизацией.
● Сопоставление по методу запроса.
Фабрика утверждения маршрутов получает один параметр — метод HTTP, который необходимо сопоставить. Маршрутизация осуществляется с помощью различных методов запроса, таких как POST, GET, PUT и DELETE.
Используйте Curl для проверки (по умолчанию #curl — запрос GET), ввод в командной строке:
Тест возвращает код страницы, чтобы доказать совпадение маршрута.
Затем мы запрашиваем тест через POST.
Возврат ошибки 404 означает, что маршрут не найден, что доказывает отсутствие подходящего маршрута.
● Сопоставление по атрибуту заголовка.
Фабрика утверждения маршрута получает два параметра, а именно имя заголовка запроса и регулярное выражение.
Предикат маршрута заголовка, как и предикат маршрута cookie, также получает два параметра: значение атрибута заголовка и регулярное выражение. Выполнить, если значение этого атрибута соответствует регулярному выражению.
● Сопоставление посредством маршрутизации хоста.
Spring Cloud Gateway может выполнять сопоставление и пересылку на основе имени хоста. Предикат HostRoute получает набор параметров и набор списков соответствующих доменных имен. Он использует адрес хоста в параметре в качестве правила сопоставления.
Используйте Curl для проверки, ввод командной строки:
Протестировав два вышеуказанных метода настройки хоста, можно сопоставить оба параметра host_route. Если параметр хоста удален, будет сообщено об ошибке 404.
● Согласование времени
Предикат поддерживает установку времени. При запросе переадресации он сначала оценивает это время и время, которое мы установили, а затем пересылает его. Поэтому он подразделяется на утверждения после установки времени, утверждения до установки времени и утверждения между установкой времени.
Подтверждение после установки времени: получите параметр формата времени UTC из фабрики предикатов после маршрута. Если текущее время запроса наступает после настроенного времени UTC, сопоставление считается успешным, в противном случае сопоставление не может быть успешным. Ниже приведена конфигурация экземпляра:
Утверждение времени предиката: получите параметр формата времени UTC из фабрики предикатов перед маршрутом. Если текущее запрошенное время предшествует настроенному времени UTC, сопоставление считается успешным, в противном случае сопоставление не может быть успешным. Ниже приведена конфигурация экземпляра:
Установите между утверждениями времени: получите параметр в формате времени UTC из фабрики предикатов маршрута. Если текущее время запроса находится между настроенными значениями времени UTC, сопоставление считается успешным, в противном случае сопоставление не может быть успешным. Ниже приведена конфигурация экземпляра:
● Сопоставление с помощью файлов cookie.
Утверждение маршрутизации файлов cookie будет принимать два параметра: один — имя файла cookie, а другой — регулярное выражение. Правило маршрутизации должно соответствовать полученному значению имени файла cookie и регулярному выражению. Если есть совпадение, маршрутизация будет выполнена. совпадений нет, маршрутизация будет выполнена. Не выполнена.
● Сопоставление по IP-адресу.
Фабрика предикатов маршрута RemoteAddr настраивает строку или IP-адрес сегмента сети IPv4 или IPv6. Если запрошенный IP-адрес находится внутри сегмента сети или совпадает с настроенным IP-адресом и совпадение успешно, он будет перенаправлен, в противном случае он не будет перенаправлен.
Вы можете проверить это, установив в Curl localhost:8080 IP-адрес вашего компьютера, и если запрошенный удаленный адрес — 192.168.1.30, этот маршрут будет совпадать.
GatewayFilter и GlobalFilter
В Spring Cloud Gateway есть два типа фильтров: один — GlobalFilter (глобальный фильтр), а другой — GatewayFilter. GlobalFilter по умолчанию действителен для всех маршрутов, а GatewayFilter необходимо указывать через группы маршрутизации.
Интерфейс GlobalFilter имеет ту же сигнатуру, что и GatewayFilter, и представляет собой специальный фильтр, условно применяемый ко всем маршрутам.
Когда запрос входит в логику сопоставления маршрутов, веб-обработчик добавляет все экземпляры GlobalFilter и все экземпляры GatewayFilter, специфичные для маршрута, в компонент цепочки фильтров. Порядок выполнения комбинаций фильтров определяется интерфейсом Ordered, который можно установить с помощью метода getOrder или с помощью аннотации @Order. Spring Cloud Gateway делит логику на этапы «до» и «после», выполняя фильтры с более высоким приоритетом, которые будут выполняться первыми, а пост-фильтры с более высоким приоритетом будут выполняться в точном порядке. Вместо этого они выполняются последними.
GatewayFilter Factories
Фильтры позволяют каким-либо образом изменять входящие HTTP-запросы или возвращаемые HTTP-ответы.
Область действия фильтра — определенные маршруты. Spring Cloud Gateway включает в себя ряд встроенных фабрик фильтров.
● Внедрение модификации префикса (добавление префикса, удаление префикса).
PrefixPathGatewayFilterFactory и StripPrefixGatewayFilterFactory — это пара фабрик фильтров, которые обрабатывают префикс URL-адреса запроса. Первая добавляет префикс, а вторая удаляет префикс.
Файл конфигурации application.yml выглядит следующим образом:
○ PrefixPathGatewayFilterFactory позволяет добавлять префикс перед соответствующим запросом маршрутизации. Например, запрос /hello в конфигурации экземпляра в конечном итоге пересылается целевой службе как /mypath/hello.
○ StripPrefixGatewayFilterFactory позволяет удалить префикс перед соответствующим запросом маршрутизации, например запросом /name/bar/foo в конфигурации экземпляра. После удаления первых двух префиксов конечный путь, пересылаемый целевой службе, — /foo.
● Добавьте и перезапишите содержимое заголовка запроса.
AddRequestHeader GatewayFilter FactoryВыбиратьиспользоватьодинверноимясказатьиценитьделатьдляженьшеньчисло,Файл конфигурации application.yml выглядит следующим образом:
Для всех совпадающих запросов заголовок xrequest-foo:bar будет добавлен к содержимому заголовка нисходящих запросов.
● Добавление и изменение содержимого тела запроса.
AddRequestParameter GatewayFilter Factory принимает в качестве параметров пару имен и значений. Параметр конфигурации application.yml выглядит следующим образом:
Для всех соответствующих запросов строка запроса foo=bar будет добавлена к нисходящему запросу.
● Реализация деградации автоматического выключателя.
Hystrix GatewayFilter позволяет внедрить Hystrix в маршрутизацию шлюза, защищая сервисы от каскадных сбоев и обеспечивая резервные ответы в случае сбоев в нисходящем направлении. Быть в предмете глаз середина начинать использовать Hystrix сеть закрывать Проходить фильтр устройство ,нуждаться хотеть К Hystrix из в соответствии с полагаться HystrixGatewayFilter Factoryдобавлятьдобавлятьодининдивидуальныйnameженьшеньчисло,А именно HystrixCommandизимия,Файл конфигурации application.yml выглядит следующим образом:
когданастраиватьиспользоватьhystrixfallbackчас,Воляизменятьволосыприезжать/incaseoffailureusethis。Примечаниезначение,этотиндивидуальный Пример также демонстрирует Понятно Проходить ПроходитьглазотметкаURIначальствоиз“lb”впередукрашенныйделатьSpring Cloud Netflix Ribbonклиентсемьяконец Реальностьсейчасгрузнагрузкасбалансированный。хозяинхотетьсценадасетьзакрыватьотвечатьиспользоватьпрограммасерединаиз ВнутриотделениеконтрольустройствоиливпричинапрограммаделатьиспользоватьfallbackUri,это тоже Воляпожалуйстапроситьсновадорога Зависит отприезжатьснаружиотделениеотвечатьиспользоватьпрограммасерединаизконтрольустройствоиливпричинапрограмма。
● Распределенное ограничение тока
SpringCloudGatewayВнутринабориз RequestRateLimiterGatewayFilterFactory обеспечивает возможность ограничения тока на основе расчета сегмента токенов. глазвпередItВнутризRedisRateLimiter,в соответствии сполагатьсяRedisПриходитьжитьмагазин Ограничение токасоответствоватьнабористатистикачислов соответствии с。когда Ранвы тоже Можетк РеальностьсейчасссебяизRateLimiter,Тольконуждаться РеальностьсейчасSpring Cloud Gateway с приносить из RateLimiter ловить рот или ВОЗ следовать «AbstractRateLimiter».
голова Первый,добавлятьдобавлятьMavenв соответствии сполагаться。
Во-вторых, добавьте конфигурацию ограничения тока.
большинствоназад,надстановитьсяверноPathизKeyResolver(Можетк Проходить ПроходитьKeyResolverПриходитьобратитесь к Конечно Ограничение токаизKey),Реальностьсейчасверноособенный КонечноPathВнизиз Ограничение токаконтрольсоответствоватьнабор。существовать Проходитьфильтрустройствосередина Можетксоответствоватьнабородининдивидуальный МожетвыбиратьизKeyResolver,KeyResolverсуществоватьсоответствоватьнаборсерединакореньв соответствии симясказатьделатьиспользоватьSpELвестииспользоватьBean。#{@myKeyResolver}давестииспользоватьимядля“pathKeyResolver”изBeanизSpELвыражение。KeyResolverловитьротпозволятьделатьиспользовать Может Подключите и отключите Стратегия ПриходитьгруппарожденныйпределпожалуйстапроситьизKey。поколениекоднравиться Вниз:
Знакомство с лицом Вниз по мотивам Динамической маршрутизация Spring Cloud GatewayРеальностьсейчас(Взаимнозакрыватьпоколениекод Воля Будет приложено к книгеприносить),Реальностьсейчаснаправление РежимиZuulиздвигатьсясостояниедорога Зависит от Реальностьсейчаснаправление Режимдобрыйпохожий,Инструментиметь СравниватьZuulДажедобавлятьгибкийиздорога Зависит от стратегии и соответствия шаблону. Этот двадобрый решает такое направление, как Вниз.
●Проход Проход обеспечивается Spring Cloud Gateway. GatewayControllerEndpointduanконецточка Функция,Реальностьсейчасдорога Зависит отиз Добавить, удалить, изменить проверять , или ВОЗ с себя Реальность сейчас ApplicationEventPublisherAware ловитьрот,Реальностьсейчасс Конечноправедныйиздорога Зависит отдействоватьнаправление Закон。Инструменттело Можеткженьшень Тестисточниккод:GatewayControllerEndpointduanдобрый。
● Проходить Проходить РеальностьсейчасRouteDefinitionRepositoryловитьрот,Реальностьсейчасс КонечноправедныйизRepositoryдобрый,Реальностьсейчасотчислов соответствии с Библиотекаили ВОЗоблегчение жизнисерединадвигатьсясостояниедобавлятьнагрузкадорога Зависит отписьмодыханиеиз Функция。полкаструктураформа РежимиZuulиздвигатьсясостояниедорога Зависит от Выбиратьиспользовать Взаимнопохожийиздорога Зависит стратегию отдобавлятьнагрузки, блок-схему структуры фрейма типа Вниз.
Идеи и решения динамической маршрутизации подробно описаны ниже.
голова Первый,Adminделатьдлявпередконец Трубкапричинаинтерфейс,Воляиспользоватьсемьявернодорога Зависит отиздобавлятьдобавлять、Исправлятьждатьдействовать Проходить ПроходитьRouteAsynchServiceжитьмагазинприезжатьDBсередина。DBсерединаизжитьмагазин Узелструктуранравиться Внизкартина Место Показывать。
Характерчастькартографированиезакрыватьсистеманравиться Вниз。
● routeid:отметказнаниедорога Зависит отизтолькоодинID,Можетккореньв соответствии сдорога Зависит отIDпроверятьпопытаться найтидорога Зависит от,дорога Зависит отID не может повторяться.
● routename:отвечатьиспользоватьимясказатьдаотметказнаниедорога Зависит отизимя, да не требуется.
● routeorder:верноотвечатьRouteDefinitionсерединаизorderсвойство。
● статус маршрута: статус маршрутизации, включая редактирование, публикацию, автономный режим и т. д.
● strategy:дорога Зависит от стратегии,иZuulиздорога Зависит стратегия аналогична и также поддерживает стратегию ServiceID и стратегию URL.
●predicates:верноотвечатьRouteDefinitionсерединаизList<PredicateDefinition> Сбор политики предикатов, значение ключа верноиз формы, верноотвечать политику утверждений.
● filters:верноотвечатьRouteDefinitionсерединаизList<FilterDefinition>filtersсобирать,кключевое значениеверноизформа Режимверноотвечать Проходитьфильтрустройство Стратегия。
● uri: верноотвечатьназад Боковая служба, Можеткданазад Боковая служба изServiceID, также Можеткда Сервис изURLземлясайт, идорога Зависит от стратегииверноотвечать。
● groupname:отметказнаниеэтотиндивидуальный Новыйиздорога Зависит от Принадлежатьсуществоватьгдеиндивидуальныйсетьзакрыватькластер Внизлапша。
Что Второсортный,Динамическая маршрутизация Spring Cloud GatewayТрубкапричина Стратегия Все Проходить ПроходитьAdminловитьполучатьверносетьзакрыватьдорога Зависит отиз Добавить, удалить, изменитьпроверять Заказ,Ранназад Проходить ПроходитьRouteAsynchServiceВолядорога Зависит от Даженовый Служитьиволосытканьприезжатьверноотвечатьизсетьзакрыватьузел,сетьзакрыватьузелотчислов соответствии с Библиотекадвигатьсясостояниеполучатьбольшинствоновыйиздорога Зависит отсостояниесостояние,Даженовыймедленныйжитьикогдавпереддорога Зависит от。Внизлапшаверносетьзакрыватьузелизслучайкуски Механизм прослушивания Входить ХОРОШОобъяснять。
объяснятьяркий1#:существоватьпоколениекодчастьсередина,refreshRouteнаправление Закондаслучайкускимониторизвходитьротнаправление Закон,Долженнаправление Законвстреча КAdminТрубкапричина Экспозиция услугодининдивидуальныйRESTСлужить。когдаAdminвернодорога Зависит от Входить ХОРОШОДажеизменятьназад,встречанастраиватьиспользоватьrefreshRouteнаправление Закон,трогатьволосыSpring Cloud GatewayсприноситьизRefreshRoutesEventслучайкуски,такой жечаснастраиватьнаборатомтканьты Изменятьколичествоroutedefineдляtrue,существовать Внизлапшаиздвигатьсясостояниедорога Зависит отдобавлятьнагрузкасерединакореньв соответствии с соответствии с Библиотекасерединачитатьдорога Зависит отвозвращатьсядаотмедленныйжитьсерединачитатьдорога Зависит от。
Внизлапшада Конечно Систематизацияизядерный Сердцедорога Зависит отдвигатьсясостояниедобавлятьнагрузкаимедленныйжить Трубкапричинаиззакрыватьключпоколениекод,хозяинхотеть Проходить Проходить Реальностьсейчасс Конечноправедныйиздорога Зависит отRepositoryдобавлятьнагрузкадобрый Приходитьдвигатьсясостояниеземлядобавлятьнагрузкадорога Зависит от,Проходить ПроходитьследоватьнаследоватьRouteDefinitionRepositoryотецдобрый Приходитьпоставлятьдорога Зависит отизсоответствоватьнаборписьмодыхание,Реальностьсейчас Вздохредактироватьнравиться Вниз:
объяснятьяркий2#:существоватьпоколениекодчастьсередина, SagRouteDefinationRepositoryдас Конечноправедныйиздорога Зависит отдобавлятьнагрузка Реальностьсейчасдобрый,этотиндивидуальныйдобрый Реальностьсейчас ПонятноRouteDefinitionRepositoryловитьрот。
Долженловитьротизисточниккоднравиться Вниз:
Ран назад, и Входить getRouteDefinitions направление Закон, это RouteDefinitionRouteLocatorизразнастраиватьнаправление Закон,Можетк Реальностьчас Даженовыйдорога Зависит отписьмодыхание,поколениекоднравиться Вниз:
отисточниккодсерединанастраиватьиспользоватьцепьдорогапроследить назад,Можеткволосысейчас Внизлапшаизнастраиватьиспользоватьцепьдорога:
объяснятьяркий3#:существоватьпоколениекодчастьсередина,RefreshNeed() направление Законда определяет, является ли обновление жизни недействительным, и идентифицирует атомарное логическое значение Изменитьколичество.,когдаAdminразнастраивать1#поколениекодчастьсерединаизобновитьловитьротчас,встреча Воля Должен Неверныйловитьрот Открыть。существоватьдорога Зависит отдобавлятьнагрузкачас,Если обновитьNeedдляfalse и RouteDefinitions не имеет значения null,Так отлично Первыйдобавлятьнагрузкамедленныйжитьсерединаиздорога Зависит отписьмодыхание。нравитьсяфруктыrefreshNeedдляtrue,Так отлично Первый Выполнять ХОРОШОдобавлятьнагрузкачислов соответствии с Библиотекаиздействовать,Проходить Проходитьэтотчастьпоколениекодиз Вздохредактироватьвпричинапросто Сохранятьсертификатсетьзакрыватьсерединадорога Зависит отиз Рефреш: эффективность замедляется соответствии с Библиотекасерединадорога Зависит отписьмодыханиеиз синхронизации.
объяснять яркий 4 # :Должен поколение код часть да от число в соответствии с Библиотека середина добавлять нагрузка дорога Зависит от из ядерный Сердце Реальность сейчас 。
localteRoutefromDB ( ) направление Закон от число в соответствии с Библиотека середина добавлять нагрузка дорога Зависит от , возвращаться разRouteDefinitionVoМодельизчислов соответствии с Библиотекадорога Зависит отсписокписьмодыхание。Внизлапшада Должен Модельдобрыйизпоколениекод:
transfer( ) направление Закон Реальность сейчас Понятно от RouteDefinitionVo приезжатьRouteDefinitionиздобрыйформаизменять Изменять,Внизлапшадаtransfer()направление Законнастраиватьиспользоватьиздобрыйформаизменять Изменятьизядерный Сердцепоколениекод:
объяснятьяркий5#:существоватьпоколениекодчастьсередина, GatewayPredicateDefinitionFactoryнад в утверждение из режима животногосоответствоватьизменять. Предикат-Определение утверждения из модели Конечно означает, Конечно означает имя для ключа, args для значения. Например, Вниз:
GatewayPredicateDefinitionFactoryнадстановиться Проходитьфильтрустройствоизформа Режимживотноесоответствоватьизменять Изменять。FilterDefinitionда Проходитьфильтрустройствоиз Модель Конечноправедный,Конечно, это означает имя для ключа, args для значения. Например, Вниз:
начинатьдвигатьсяSpring Cloud Gateway,нуждатьсяхотетьв соответствии сполагатьсячиновникнаправлениеизStarterГруппакуски。ВнизлапшанасотMavenв соответствии сполагатьсястарт, верно Весна Cloud Gatewayизисточниккод Входить ХОРОШОанализировать。
инициализациядобавлятьнагрузка
Выше spring-cloud-starter-gatewayначинатьдвигатьсявпереднуждатьсяхотетьвестииспользоватьизодининдивидуальныйсдвигатьсясоответствоватьнаборStarter,Можетк Проходить Проходитьпроверять Запросить ДолженStarterизисточниккодволосысейчасSpring CloudGatewayиз Реальностьсейчас Местов соответствии сполагатьсяиз Группакуски,Mavenсоответствоватьнаборнравиться Вниз:
Может к смотреть приезжать Spring Cloud Gateway из Starter начинать двигаться добрый хозяин хотеть в соответствии с полагатьсяspring-cloud-gateway-coreГруппакуски。делатьиспользоватьEnableAutoConfigurationПримечаниеразвязатьнадстановитьсясдвигатьсясоответствоватьнаборинициализацияписьмодыхание,нассуществоватьSpring Cloud GatewayВнизизspring.factories(существовать Сумкаspring-cloud-gateway-core)голосяркийискусствокускинравиться Вниз:
GatewayAutoConfiguration
объяснятьяркий:
GatewayAutoConfigurationсоответствоватьнабордаSpring Cloud Gatewayизядерный Сердцесоответствоватьнабордобрый,инициализациянравиться Вниз Группакуски:
● NettyConfiguration
●Глобальный фильтр( AdaptCachedBodyGlobalFilter、RouteToRequestUrlFilter、 ForwardRoutingFilter、ForwardPathFilter、WebsocketRoutingFilter、WeightCalculatorWebFilterждать)
● FilteringWebHandler
● GatewayProperties
● PrefixPathGatewayFilterFactory
● RoutePredicateFactory
● RouteDefinitionLocator● RouteLocator
● RoutePredicateHandlerMapping(проверятьпопытаться найтиживотноесоответствоватьприезжатьизRouteи Входить ХОРОШОвпричина)
● GatewayWebfluxEndpoint(ТрубкапричинасетьзакрыватьизHTTP API)
HTTPпожалуйстапроситьдорога Зависит отисточниккоданализировать
Spring Cloud GatewayсерединаделатьиспользоватьHandlerMappingвернопожалуйстапроситьизцепьловить Входить ХОРОШОанализировать,животноесоответствоватьверноотвечатьизRoute,изменятьволосыприезжатьверноотвечатьиз Служить。Внизкартинадлявсеиндивидуальныйпожалуйстапроситьизпроцесс, использовать семья пожалуйста просить Первый Проходить Проходить DispatcherHandler попытаться найти приезжать верно отвечать изGatewayHandlerMapping,Снова Проходить ПроходитьGatewayHandlerMappingанализироватьживотноесоответствоватьприезжатьизHandler;Handlerвпричинанадназад,через ПроходитьFilterвпричина,Завершить обслуживание.
существоватьвпередлапшаиздвигатьсясостояниедорога Зависит отдобавлятьнагрузка Проходитьстепеньсередина,Что Реальностьужечерезпроникать ПонятновсеиндивидуальныйHTTPпожалуйстапроситьизнастраиватьиспользоватьцепьдорога,В частности, Вниз:
пожалуйстапросить Первый Зависит отDispatcherHandlerВходить ХОРОШОвпричина,DispatcherHandlerсуществоватьинициализациячасвстречасуществоватьSpring IoCПозволятьустройствосерединапроверятьпопытаться найти РеальностьсейчасHandlerMappingловитьротиз Реальностьсейчасдобрый 。Ран назад Сохранять жить приезжать Внутри отделение Изменять количество handlerMappings число в соответствии с Узел структура середина 。
DispatcherHandler настраивать использовать handler направление Закон перекрывать поколение handlerMappings середина изHandlerMappingловитьрот,хозяинхотетьисточниккоднравиться Вниз:
AbstractHandlerMapping существовать getHandler направление Закон середина запечатать Пакет ПонятноCORS(Cross-Origin Resource Совместное использование, междоменное совместное использование ресурсов). Поскольку и для МестоиметьHandler, и Может могут относиться к CORSизвпричина, Месток рисует слондобрыйAbstractHandler Сопоставление обеспечивает «ПонятныйgetHandlerInternal» субдобрый для Реальностисейчаспроверятьпопытаться. найтиHandlerиз Инструменттелонаправление Закон。
RoutePredicateHandlerMappingиспользовать Вживотноесоответствовать Инструменттелоиздорога Зависит от,ивозвращатьсяразFilteringWebHandler 。Проходить Проходить RoutePredicateHandlerMapping середина изRouteLocator верно слон жить магазин начинать двигаться час добавлять нагрузка из дорога Зависит от верно слон письмо дыхание 。когдаRoutePredicateHandlerMappingполучатьверноотвечатьиздорога Зависит отчас,встреча ВоляRouteписьмодыханиежитьмагазинприезжатьServerWebExchangesсвойствосередина,Ранназадвозвращатьсяраз Реальностьсейчас ПонятноWebHandlerловитьротизFilteringWebHandler 。FilteringWebHandler да один индивидуальный жить помещать Проходить фильтр устройство изHandler。
настраиватьиспользовать RoutePredicateHandlerMappingизgetHandlerInternalнаправление ЗаконотRouteLocatorполучатьдорога Зависит от,И житьпомещатьсуществоватьServerWebExchangeсередина,возвращатьсяразwebFilterвернослон,поколениекоднравиться Вниз:
DispatcherHandler Проходить Проходить SimpleHandlerAdapter Группа куски настраивать использоватьFilteringWebHandlerмодульизhandlerнаправление Закон,FilteringWebHandlerмодульловить С настраивать использовать Из вперед существовать Позволять устройство середина Примечание книга из Место иметь Filter ,в причина над полный назад возвращаться разResponse,поколениекоднравиться Вниз:
структура Цзяньсянотвечать Режиммикросервисы Может получить асинхронный、кольцоотвечатьсекс、эластичность、Быстрое восстановление、противодавлениеждатьсистема统особенныйсекс,То же, что и час кольцо есть тип микросервисы структурасуществовать ресурс приходится на испо льзовать, высокие параллельные волосы, высокая пропускная способность, асинхронный сценарий впричина, середина имеет более сильные преимущества. Существует множество вариантов глазвпередотвечать по рамочной технологии.,нравитьсяфрукты Волякольцоотвечать Режимкомпилироватьстепеньотвечатьиспользоватьприезжатьбольшойрегулированиеформарожденныйпроизводственная системасередина,нонуждатьсяхотеть Входить ХОРОШОжумиизнанастройка Исследования,И всесторонне учитывать такие факторы, как фактический проектный цикл, опыт персонала, техническая база и т. д.,Избегайте технических сложностей, просить проблемы и развивать бизнес. Проходить узкие места.
книгаискусство Сразуда Пусть на небесах не будет ошибок Даватьбольшойдоля домаиз Внутри Позволять,У каждого есть урожай из слов Можетк поделиться Вниз,Хотите узнать больше изязык Можеткприжатьез микро письмо официальный аккаунт обвиняемых найти меня,Я буду ждать тебя.