个人名片:
博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看
三、路由断言工厂
Spring提供了11种基本的Predicate工厂:
名称 | 说明 | 示例 |
---|---|---|
After | 是某个时间点后的请求 | - After=2037-01-20T17:42:47.789-07:00[America/Denver] |
Before | 是某个时间点之前的请求 | - Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai] |
Between | 是某两个时间点之前的请求 | - Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver] |
Cookie | 请求必须包含某些cookie | - Cookie=chocolate, ch.p |
Header | 请求必须包含某些header | - Header=X-Request-Id, \d+ |
Host | 请求必须是访问某个host(域名) | - Host=.somehost.org,.anotherhost.org |
Method | 请求方式必须是指定方式 | - Method=GET,POST |
Path | 请求路径必须符合指定规则 | - Path=/red/{segment},/blue/** |
Query | 请求参数必须包含指定参数 | - Query=name, Jack或者- Query=name |
RemoteAddr | 请求者的ip必须是指定范围 | - RemoteAddr=192.168.1.1/24 |
Weight | 权重处理 |
在上面快速入门的学习中,我们只使用到了Path。
了解:
- lPath=/user/**是什么含义?
路径是以/user开头的就认为是符合的
- lPredicateFactory的作用是什么?
读取用户定义的断言条件,对请求做出判断
四、路由过滤器
Spring提供了31种不同的路由过滤器工厂。例如:
名称 | 说明 |
---|---|
AddRequestHeader | 给当前请求添加一个请求头 |
RemoveRequestHeader | 移除请求中的一个请求头 |
AddResponseHeader | 给响应结果中添加一个响应头 |
RemoveResponseHeader | 从响应结果中移除有一个响应头 |
RequestRateLimiter | 限制请求的流量 |
… |
1.案例:给所有进入userservice的请求添加一个请求头
1.添加过滤器配置(application.yml)
注意审题,发现需要在userservice下加入过滤器。
server:
port: 10010 # 网关端口
spring:
application:
name: gateway # 服务名称
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes:
- id: user-service # 路由ID,自定义,只要唯一即可
# uri: http://127.0.0.1:8081 # 路由的目标地址 http 就是固定地址
uri: lb://userservice # 路有目标 lb为开启负载均衡,userservice为服务名称
predicates: # 路由断言,判断请求是否符合路由规则
- Path=/user/** # 路由规则 以user开头即可
filters: # 过滤器
- AddRequestHeader=come on, The future is uncertain. We are both dark horses. # 添加请求头
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
2.修改UserController
目的:使控制台可以查看到我们添加的请求头
@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id,
@RequestHeader(value ="Truth", required = false) String truth) {
log.info("Truth:{}", truth);
return userService.queryById(id);
}
3.测试
访问路径:http://localhost:10010/user/1
2.默认过滤器
作用:①对所有路由都生效的过滤器
server:
port: 10010 # 网关端口
spring:
application:
name: gateway # 服务名称
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes:
- id: user-service # 路由ID,自定义,只要唯一即可
uri: lb://userservice # 路有目标 lb为开启负载均衡,userservice为服务名称
predicates: # 路由断言,判断请求是否符合路由规则
- Path=/user/** # 路由规则 以user开头即可
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
default-filters:
- AddRequestHeader=Truth,Itcast is freaking awesome! # 添加请求头
对比:
filters在routes下一级
默认过滤器(default-filters)与routes同级