一、url配置方式
在gateway中配置uri配置有三种方式,包括
第一种:ws(websocket)方式: uri: ws://localhost:9000
第二种:http方式: uri: http://localhost:8130/
第三种:lb(注册中心中服务名字)方式: uri: lb://brilliance-consumer
二、Predicates配置方式
```
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #启动动态路由,也就是说网关现在会根据服务名去找到对应的服务
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- id: provider_routh2
uri: lb://SPRINGCLOUD-PROVIDER-DEPT
predicates:
- Path=/testGateWay02
```
上面用的path 只是predicate 中的一个
有哪几种?
这里介绍一下
1.After、Before、Between 路由断言
先看配置文件!
```
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- After=2021-07-04T19:16:43.338+08:00[Asia/Shanghai]
```
什么意思???
简单一说就知道了,就是给我们的断言有多加了一个匹配规则,除了要满足访问路径是/testGateWay01以外,还要满足当前请求的时间必须是在2021-07-04 19:16:43.338+08:00以后!也就是After某某时间以后,断言才会进行匹配!
Before、Between顾名思义也就明白了:在某某时间以前、在某两个时间之间
如果我们不在规定的时间窗口内访问,就会报错!
2.Cookie 路由断言
Cookie 断言有两个参数,一个cookie 名称和一个java 正则表达式,这个断言匹配给定的cookie 名和值正则匹配的请求。
```
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Cookie=username, ybz
```
白话文理解:就是一个键值对!请求的Cookie必须要有一个键值对username:ybz。满足我就给你访问,否则就给老子滚
3.Header 路由断言
Header断言有两个参数,一个参数名,一个正则。只有当有这个参数并且值匹配正则的时候才能执行下去。
```
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Header=X-Request-Id, \d+
```
这个路由规则匹配Header中包含X-Request-Id并且值为纯数字的请求。
4.Host 路由断言
Host 路由断言接受一个正则域名列表,正则是用英文句号分割的正则表达式。
```
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Host=**.ybz.com
```
这个路由规则匹配Header中必须包含**.ybz.com
5.Method 路由断言
Method路由断言匹配一个或多个Http请求方式(GET POST PUT DELETE HEAD).
```
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Method=GET,POST
```
这个路由匹配所有的GET POST请求。
6.Query 查询路由断言
Query路由断言有两个参数: 一个必传参数 和一个可选的正则表达式。
```
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Query=green
- Query=red, gree.
```
1.如果请求中包含green的参数,则匹配成功。
2.如果一个请求中包含参数red并且值匹配·gree.·这个正则,那么路由匹配。比如:green和greet。