Примечание. Это будет конфликтовать с зависимостями Spring-WebMVC, поэтому Spring-WebMVC необходимо исключить.
2. Напишите файл конфигурации yml.
server.port = 8088 есть Порт доступа к шлюзу
весна.приложение.имя Имя службы текущего шлюза.
Правила маршрутизации определены ниже шлюза.routes:
id — это имя этого правила маршрутизации. В файле Gateway.routes может быть много правил маршрутизации.
URL-адрес: доступ к услуге текущего шлюза, На какой URL пересылать?Прежде всего, я не могу пересылать все запросы на шлюз. Эту роль должны выполнять утверждения предикатов.
предикаты: когда Запрос достигает текущего шлюза(Так Этот запрос должен содержать номер порта IP + текущего шлюза. информация, за которой следует косая черта /, чтобы шлюз мог по умолчанию указать, что эта информация доступна,Эту информацию не нужно учитывать в предикатах.),
Если URL-адрес после номера порта начинается с /order-serv/**,Так Просто перешлите на IP + порт указанного выше URL. . и слэш /Все последующие пути не будут удалены., затем он перенаправляется на адрес http://localhost:8020/order-serv/order/add
(order-serv — это имя службы, чтобы служба заказов не имела адрес, начинающийся с /order/add, а служба инвентаризации также имела адрес, начинающийся с /order/add, поэтому Запросы, отправленные на шлюз, содержат имя пересылаемой службы.),но В запросе, полученном службой заказов, нет /order-serv/., только отправленный запрос имеет вид http://localhost:8020/order/add, поэтому его можно получить. Разрешить шлюзу удалить путь первого уровня, фильтровать префиксы через фильтры
Если утверждение не выполняется, будет сообщено об ошибке 404.
Здесь мы жестко запрограммировали пересылаемые URL-адреса в конфигурации. При миграции сервера IP-адрес будет меняться или сервер будет развернут в кластере, и балансировку нагрузки необходимо выполнять через nginx, что очень хлопотно. .
Мы можем легко решить эти проблемы, интегрировав шлюз и nacos.
Интегрируйте НАКО
1. Продолжайте вводить зависимости nacos
2. Продолжаем писать файл конфигурации yml.
(1) Чтобы интегрировать nacos, просто зарегистрируйте текущую службу шлюза в nacos и напишите адрес службы nacos и пароль учетной записи.
(2) Измените адрес службы для пересылки в правилах маршрутизации на имя службы «order-service» (url: order-service), и поскольку вам необходимо использовать стратегию балансировки нагрузки ленты, которая поставляется с nacos, поэтому добавьте lb:// впереди, lb означает балансировку нагрузки.
шлюз. Шлюз заменит весь «order-service» на IP-адрес одной из служб заказа (поскольку шлюз будет регулярно получать список IP-адресов различных служб, зарегистрированных на nacos)
Это решает проблему, заключающуюся в том, что при миграции сервера, изменении IP-адреса или развертывании сервера в кластере необходимо использовать nginx для обратного прокси и балансировки нагрузки.
Сокращенные правила маршрутизации: соглашение важнее конфигурации.
(1) После включения функции автоматического определения сервисов nacos нет необходимости писать правила утверждения.
(2) Когда запрос, отправленный на шлюз, начинается с имени службы, зарегистрированной в nacos, он будет автоматически перенаправлен на сервер этой службы, а путь первого уровня будет автоматически отфильтрован (недостаток: правила маршрутизации не являются гибкими). достаточно)
В настоящее время, если вы получаете к нему доступ в соответствии с форматом адреса шлюза/микросервиса/интерфейса, вы можете получить успешный ответ.
фабрика утверждений
Создание утверждений на основе URL-адреса — это встроенная фабрика утверждений шлюза.

Пользовательская фабрика утверждений маршрутизации
Здесь предполагается, что вы настраиваете фабрику утверждений на основе параметров запроса Query, копируете содержимое в исходный код, а затем изменяете его по мере необходимости.
настроить
Фабрика утверждений, основанная на параметрах запроса запроса.
Вам необходимо наследовать класс AbstractRoutePredicateFactory и переписать логику метода apply. В методе apply вы можете получить объект ServerHttpRequest через Exchange.getRequest(), чтобы получить параметры запроса, метод запроса, заголовок запроса и другую информацию.
1. Это должен быть пружинный компонент, то есть боб
2. Класс необходимо добавить
RoutePredicateFactory
как конец
3. Должен передаваться по наследству
AbstractRoutePredicateFactory
4. Вы должны объявить статический внутренний класс и объявить атрибуты, чтобы получить соответствующую информацию об утверждении в файле конфигурации.
5. Нужно совмещать
ярлыкFieldOrder
Связывать
6. Используйте команду apply, чтобы логически определить, является ли true совпадением успешным, а false — неудачным.
Фильтровать (сначала фильтровать, затем маршрутизировать)
(1) Сначала обработайте запрошенный URL-адрес с помощью фильтра или добавьте, удалите и измените некоторую информацию, такую как заголовки запросов, файлы cookie и т. д.
(2) Затем направьте на соответствующий сервер через список служб nacos.
Роль фильтра: Когда запрос поступает на шлюз, мы можем обработать его с помощью бизнес-логики.
например:
(1) Пропустите фильтр через переднююУдалить первый слой путей
(2) Вы можете добавить заголовок запроса ко всем запросам, поступающим на шлюз, а затем установить содержимое внутри.
(3) Вы можете установить файл cookie для всех запросов, поступающих на шлюз, и так далее.
Подробную информацию обо всех встроенных фильтрах можно найти на официальном сайте.
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
Вот несколько примеров кода:
Тестовый адрес отправляется на шлюз шлюза.
Перейдите к следующему адресу @GetMapping через маршруты и следующий код для получения запроса и ответа.
пример 1:
Пример 2
Пример 3
Предыдущий URL-адрес отправляется на шлюз, фильтруется и получает префикс /mall-order. В настоящее время, чтобы сервер мог получать ответы, его необходимо настроить так, чтобы все отправляемые запросы переносили /mall-order.Таким образом, сервер обычно может получать запросы, направляемые шлюзом.
Пример 4
Запросы, отправленные на текущий шлюз, будут перенаправляться на веб-сайт Baidu.
302 — код состояния ответа после перенаправления
Пользовательские фильтры

глобальный фильтр
Разница между локальными фильтрами и глобальными фильтрами:
Частичный: Частичный предназначен для определенного маршрута и должен быть настроен в маршруте.
Глобально: для всех запросов маршрутизации нет необходимостиНастраивается в файле конфигурации, После определения он вводится в действие
Встроенные глобальные фильтры:
Если lb включен в адрес маршрутизации, политика балансировки нагрузки будет автоматически принята, что соответствует первому глобальному фильтру, указанному выше.
Эти глобальные фильтры будут автоматически оцениваться и обрабатываться без нашего руководства.
Пользовательские глобальные фильтры (ключевые моменты)
Записывайте все запросы на доступ и сохраняйте их в виде журнала. Вы можете использовать собственные глобальные фильтры.
Или вы можете настроить глобальные фильтры для определения входа и разрешений пользователя.
Настроить глобальные фильтры очень просто.
1. Определить класс и оставить его на управление контейнеру SpringIOC, то есть добавить аннотации Spring. @Компонент
2.
Наследовать интерфейс GlobalFilter, чтобы переписать метод фильтра внутри, вам нужно только написать тело метода внутри.
3.
Обмен параметрамив Содержит Войдите в этот шлюзВся запрошенная информация, извлеките URL-адрес, заголовки, файлы cookie, параметры пути и другую информацию, а затем выполните соответствующие действия. обработка бизнеса
4. возврат цепочки.фильтр(обмен) Освободить запрос
Запросить регистрацию
В микросервисе шлюза добавьте сюда эту команду, чтобы включить ведение журнала и записывать все запросы, проходящие через шлюз, но она будет выводиться только на консоль.

междоменная конфигурация шлюза
Междоменный: когда http-запрос находится на разных IP-адресах и одном и том же порту, он называется междоменным.
(Только один и тот же IP + один и тот же порт называется одним и тем же доменом, и оба могут находиться в одном домене)
1. Настроить через yml , настроенный на следующем уровне шлюза

Содержимое конфигурации можно изменить самостоятельно в междоменном режиме.
2. Установить через класс конфигурации
дозорный в сочетании со шлюзом-шлюзом
В сочетании с Sentinel выполняет понижение уровня управления потоком запросов, отправленных на шлюз.
дозорный разделен на две части
Предварительное условие: скачайте клиент Sentinel с удаленного сервера, установите и запустите его.
Для службы шлюза требуется только:
Файл конфигурации службы шлюза плюс IP+порт, пароль учетной записи дозорного клиента
Таким образом, интегрировано понижение уровня управления потоком Sentinel.
у Sentinel есть специальные правила для сервисов шлюза, его интерфейс отличается от интерфейса понижения версии управления потоком для методов (входов в службы) в контроллере.
Вы можете ограничить текущий поток на основе этих правил в фабрике утверждений.
Поток может быть ограничен на основе определенного IP-адреса, имени удаленного домена, заголовка запроса, параметров URL-адреса и значения файла cookie.
Настройте содержимое ответа Sentinel в сочетании со шлюзом
существоватьПосле того, как уровень шлюза будет понижен или отключен из-за дозорного управления потоком, он ответит запрашивающей стороне следующим содержимым.,

Если такой контент нам не нужен, нам нужно настроить способ реагирования на исключения.Есть два способа
Способ 1: (простой)
В конфигурации yml напишите вышеуказанный контент слоями,
весна
.
облако
.
дозорный
.
сцг
.
отступать
.
ответ
‐
тело
=
'{"код":403,"мес":"
Текущий предел
"}'
Содержимое после тела ответа — это наш настроенный контент ответа (в формате json).
, написанное содержимое является содержимым ответа
Способ 2:

Установите код состояния ответа, тип ответа (в формате json) и содержимое ответа («Понижено!»).
Высокая доступность шлюза
