Introducción a Predicate
Spring Cloud Gateway coincide con el enrutamiento como parte de la HandlerMapping
infraestructura de Spring WebFlux . Spring Cloud Gateway incluye muchas fábricas de aserción de enrutamiento incorporadas. Todas estas afirmaciones coinciden con los diferentes atributos de la solicitud HTTP. Usted puede plantar varias rutas de afirmaciones lógicas y and
declaraciones utilizados en combinación .
Sitio web oficial: https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/#gateway-request-predicates-factories
Predicado utilizado comúnmente:
Predicado utilizado comúnmente
Referencia de construcción del proyecto de demostración: [SpringCloud] Configuración de enrutamiento de puerta de enlace (diecisiete) , solicitud de demostración utilizando el comando curl
1 、 Después de predicar ruta
La After断言
un parámetro, una datetime
(que es el Java ZonedDateTime
). La aserción coincide con las solicitudes que ocurrieron después de la fecha y hora especificadas. El siguiente ejemplo configura la afirmación después del enrutamiento:
Ejemplo 1. application.yml
1 primavera: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: after_route 6 uri: http: // localhost: 8001 7 predicados: 8 - Después = 2020-04-20T23: 57: 57.308 + 08: 00 [Asia / Llevar a la fuerza]
Esta ruta cumple con cualquier solicitud después de las 23:57 huso horario (Shanghai) del 20 de abril de 2020.
Comando de solicitud de prueba: curl http: // localhost: 9527 / payment / get / 1
2 、 Antes de predicar ruta
La Before断言
un parámetro, una datetime
(que es el Java ZonedDateTime
). Esta afirmación coincide con la solicitud que ocurrió antes de la especificada datetime
. El siguiente ejemplo configura aserciones previas al enrutamiento:
Ejemplo 2. application.yml
1 primavera: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: before_route 6 uri: http: // localhost: 8001 7 predicados: 8 - Antes = 2020-04-21T23: 57: 57.308 + 08: 00 [Asia / Llevar a la fuerza]
Esta ruta cumple con cualquier solicitud antes de las 23:57 huso horario (Shanghai) del 21 de abril de 2020.
3 、 Entre ruta Predicate
Los Between断言
dos argumentos, datetime1
y datetime2
este es el Java ZonedDateTime
objetos. Esta afirmación coincide con las solicitudes datetime1
que ocurrieron después y antes datetime2
. Este datetime2
parámetro debe ser publicado datetime1
. El siguiente ejemplo configura aserciones entre rutas:
Ejemplo 3. application.yml
1 primavera: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: between_route 6 uri: http: // localhost: 8001 7 predicados: 8 - Entre = 2020-04-20T23: 57: 57.308 + 08: 00 [Asia / Shanghai], 2020-04-21T23: 57: 57.308 + 08: 00 [Asia / Shanghai]
4 、 Predicado de ruta de cookies
Dicho dicho Cookie断言
toma dos parámetros, la cookie name
y regexp
(que es una expresión regular de Java). La aserción coincide con una cookie con el nombre dado y cuyo valor coincide con la expresión regular. El siguiente ejemplo configura aserciones de enrutamiento de cookies:
Ejemplo 4. application.yml
1 resorte: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: cookie_route 6 uri: http: // localhost: 8001 7 predicados: 8 - Cookie = nombre de usuario, xiaoming
Esta ruta tiene un nombre coincidente para el nombre de usuario y solicitar una cookie Xiaoming expresiones regulares.
Comando de solicitud de prueba: curl http: // localhost: 9527 / payment / get / 1 --cookie "username = xiaoming"
5 、 Predicado de ruta de encabezado
La descripción Header断言
toma dos parámetros, un encabezado name
y uno regexp
(que es una expresión regular de Java). La aserción coincide con el encabezado con el nombre dado y cuyo valor coincide con la expresión regular. El siguiente ejemplo configura las aserciones de enrutamiento de encabezado:
Ejemplo 5. application.yml
1 resorte: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: header_route 6 uri: http: // localhost: 8001 7 predicados: 8 - Header = X-Request-Id, \ d +
Si la solicitud se nombra con X-Request-Id
el valor de \d+
la expresión regular coincidente cabecera (es decir, un valor de uno o más dígitos), entonces la coincidencia de ruta .
Comando de solicitud de prueba: curl http: // localhost: 9527 / payment / get / 1 -H "X-Request-Id: 123"
6 Pred Predicado de ruta de host
Esto Host断言
toma un parámetro: la lista de nombres de host patterns
. Este patrón es un patrón de estilo Ant con .
separadores . Aserción y Host
coincidencia de patrones de cabecera a juego. El siguiente ejemplo configura las aserciones de ruta de host:
Ejemplo 6. application.yml
1 resorte: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: host_route 6 uri: http: // localhost: 8001 7 predicados: 8 - Host = **. X.com
Si la solicitud tiene dicho Host
valor de encabezado para la coincidencia de ruta **. X.com
Comando de solicitud de prueba: curl http: // localhost: 9527 / payment / get / 1 -H "Host: demo1.x.com"
7 、 Método Predicado de ruta
El parámetro Method断言
requerido methods
es uno o más parámetros: método HTTP para que coincida. El siguiente método de configuración de ejemplo enruta aserciones:
1 resorte: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: método_ruta 6 uri: http: // localhost: 8001 7 predicados: 8 - Método = GET
Comando de solicitud de prueba: curl http: // localhost: 9527 / payment / get / 1 -X GET
8 、 Ruta Ruta Predicado
Los Path断言
dos parámetros: una lista de la primavera PathMatcher
patterns
y un distintivo de llamada opcional matchOptionalTrailingSeparator
. El siguiente ejemplo configura las aserciones de enrutamiento de ruta:
1 resorte: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: ruta_ruta 6 uri: http: // localhost: 8001 7 predicados: 8 - Ruta = / pago / get / **
Comando de solicitud de prueba: curl http: // localhost: 9527 / payment / get / 1
9 、 Predicar ruta de consulta
Lo descrito Query断言
toma dos parámetros: requerido param
y opcional regexp
(que es una expresión regular de Java). El siguiente ejemplo configura aserciones de enrutamiento de consultas:
Ejemplo 9. application.yml
1 resorte: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: query_route 6 uri: http: // localhost: 8001 7 predicados: 8 - Query = green
Si la solicitud contiene green
parámetros de consulta, la ruta anterior coincide .
Comando de solicitud de prueba: curl http: // localhost: 9527 / payment / get / 1? Green = 1
10 、 RemoteAddr Predicado de ruta
RemoteAddr
La lista requerida para la aserción sources
es una cadena de notación CIDR (IPv4 o IPv6), como 192.168.0.1/16
(donde 192.168.0.1
hay una dirección IP y 16
una máscara de subred). El siguiente ejemplo configura un predicado de enrutamiento RemoteAddr:
1 resorte: 2 nube: 3 puerta de enlace: 4 rutas: 5 - id: query_route 6 uri: http: // localhost: 8001 7 predicados: 8 - RemoteAddr = 192.168.1.1 / 24
Solicitar comando de prueba: curl http://192.168.1.4:9527/payment/get/1
11 Pred Predicado de ruta de peso
Esto Weight断言
tiene dos parámetros: group
y weight
(a int). Los pesos se calculan en grupos. El siguiente ejemplo configura aserciones de enrutamiento de peso:
Ejemplo 11. application.yml
1 resorte: 2 puerta de enlace: 3 descubrimiento: 4 rutas: 5 - id: weight_high 6 uri: http: // localhost: 8001 7 predicados: 8 - Weight = group1, 8 9 - id: weight_low 10 uri: http: // localhost : 8002 11 predicados: 12 - Peso = grupo1, 2
Esta ruta reenviará aproximadamente el 80% del tráfico a http: // localhost: 8001 y aproximadamente el 20% del tráfico a http: // localhost: 8001
Solicitar comando de prueba: curl http: // localhost: 9527 / payment / get / 1