Spring Cloud Gateway будет сопоставлять правила маршрутизации одно за другим в порядке, определенном правилами маршрутизации. Если запрос успешно соответствует правилу маршрутизации, правило маршрутизации выбирается, и последующие правила маршрутизации больше не будут учитываться.
Поэтому порядок правил маршрутизации очень важен. Как правило, более конкретные правила маршрутизации следует размещать раньше, чтобы их не перезаписали более общие правила маршрутизации.
Вот пример,Путь, который он запросит,/api/user/123
Запросы направляются на сервер с именемuser-service
услуги,И будет/api/user
Другие запросы, начинающиеся с, направляются в каталог с именемuser-service-v2
услуги:
spring:
cloud:
gateway:
routes:
- id: user-service-route
uri: lb://user-service
predicates:
- Path=/api/user/{id}
- id: user-service-v2-route
uri: lb://user-service-v2
predicates:
- Path=/api/user/**
В приведенном выше примере,user-service-route
Измените путь запроса на/api/user/123
Запросы направляются наuser-service
Служить,user-service-v2-route
будет/api/user
Остальные запросы, начинающиеся с, направляются наuser-service-v2
Служить。
Весной Cloud В Gateway приоритет правил маршрутизации определяется Порядок соответствия предикатов маршрутаи Порядок определения правил маршрутизации Решать。
Spring Cloud Gateway будет сопоставлять предикаты маршрутизации в следующем порядке:
Это означает, что чем раньше предикат маршрутизации определен в правиле маршрутизации, тем выше его приоритет сопоставления.
существовать Порядок соответствия предикатов маршрута Та же ситуация, Будет решено, какое правило будет выбрано. Если несколько правил маршрутизации соответствуют одному и тому же запросу,Будет выбрано правило, определенное первым в списке правил маршрутизации.
Следовательно, Порядок определения правил Маршрутизация также очень важна. в целом,Мы должны определить правила маршрутизации в порядке от высокого к низкому приоритету.,Это гарантирует, что в первую очередь будут сопоставляться более конкретные правила.
Вот пример,это показывает порядок определения правил Влияние маршрутизации на сопоставление маршрутов. Предположим, у нас есть следующие три правила маршрутизации:
spring:
cloud:
gateway:
routes:
- id: rule1
uri: http://localhost:8080/service1
predicates:
- Path=/api/v1/**
- id: rule2
uri: http://localhost:8080/service2
predicates:
- Path=/api/v1/users/**
- id: rule3
uri: http://localhost:8080/service3
predicates:
- Path=/api/**
В приведенных выше правилах,rule1
Соответствует всем/api/v1
первоначальный запрос,rule2
Соответствует всем/api/v1/users
первоначальный запрос,rule3
Соответствует всем/api
первоначальный запрос。
Сейчас,Предположим, есть запрос с путем/api/v1/users/123
。По вышеуказанным правилам,Этот запрос может соответствовать всем трем правилам маршрутизации. но,потому чтоrule1
существоватьrule2
иrule3
ранее определенный,поэтомув конце концов выберуrule1
,Направьте запрос наhttp://localhost:8080/service1
。
Если мы изменим порядок определения правил,Воляrule3
放существовать最前面,那么相同的请求Воля会被路由到http://localhost:8080/service3
。
Следовательно, нам следует разумно определить порядок правил маршрутизации в соответствии с конкретной ситуацией и приоритетом правил маршрутизации, чтобы обеспечить правильность и эффективность сопоставления маршрутов.