Gateway按照官方来说是要比Zuul强的有点多的;
但是配置的坑比较多,很多官方的原配置 抄下来 也没有效果,毕竟不咋理得清,只能抄,抄不懂,就没得搞
Gateway就直接上完全的配置了:
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
配置文件,同样的启动类需要添加@EnableDiscoveryClient注解,注册到eureka中
server:
port: 8100
spring:
application:
name: gateway-server
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins:
# 跨越规则,指定了下方可以跨域的浏览地址之后,该浏览地址通过ajax访问gateway,此处是8100,然后gateway在通过映射找到需要访问的服务
- "*" # 不支持通配符方式,但是支持一个整的*号
allowedMethods:
- GET
routes:
# 路由id 可以随便写,但是需要见名知意
- id: user-service
# 映射的地址 此处是uri 不是url 请注意!!!
# uri: http://127.0.0.1:8081
uri: lb://user-service # 代理的服务地址,代表该uri将会由loadBalance负责负载均衡策略
# 根据下面的断言 映射到上方的地址 如果匹配/user/**即可映射到http://127.0.0.1:8081/user/**
predicates:
# 匹配 /user/**
# - Path=/user/**
- Path=/user/**
# 局部过滤器 ,配置在配置文件中,对访问地址端口后面的前缀做处理
filters:
# 添加请求路径的前缀 前缀路径 访问localhost:8100/8 --> localhost:8081/user/8
- PrefixPath=/user
# 去除前缀个数 1代表去除端口后一个前缀,2代表去除2个 访问localhost:8100/app/user/8 --> localhost:8081/user/8
- StripPrefix=1 # 先添加/user 再删除/user 还是原来的,代表过滤器链可以成功执行
- MyParam=name # 笔者自己写的继承@AbstractGatewayFilterFactory抽象类的局部过滤器MyParamGatewayFilterFacotry 默认规则 这里就是MyParam ,奇奇怪怪(springcloud 能被吐槽的点是真的多)
# 局部过滤器 配置在default-filters下,效果等同于 全局过滤器,但是真正意义上的全局过滤器不需要配置,并且实现的接口是 GlobalFilter
# 而配置在spring.cloud.gateway.routes.- id.routes下和spring.cloud.gateway.default-filters下的过滤器都是实现GatewayFilterFactory接口,严格意义上都称为局部过滤器
- id: consumer-service
uri: lb://consumer-service
predicates:
- Path=/consumer/**
default-filters:
# springcloud内置的过滤器,还有一个AddRequestParameters 不知道怎么设置参数
- AddRequestHeader=tokenReq,rinilaoniang # 在过滤器中往请求头中添加一个请求头 tokenReq
- AddResponseHeader=token111,rinixianrenbanban # 在过滤器中往响应对象中添加一个响应头 token
- AddRequestParameter=foo,bar #添加请求参数
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10001/eureka
# 设置ip优先
instance:
prefer-ip-address: true
# gateway 内置的ribbon 和feign内置的ribbon一样的配置
#ribbon:
# ReadTimeout: 2000 # 读取超时时长 作用在服务提供端的,如果提供端2秒内未给出响应,视为超时 ,也没有见到效果
# ConnectTimeout: 1000 # 建立链接的超时时长
# MaxAutoRetries: 0 # 当前服务器的重试次数
# MaxAutoRetriesNextServer: 0 # 重试多少次服务
# OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试
#gateway内置的hystrix 默认熔断超时时长是1秒 不生效的 假的; 官网提供的也无效,应该需要实现Hystrix的接口
#hystrix:
# command:
# default:
# excution:
# isolation:
# thread:
# 没生效,即使线程睡5秒也没有见到效果
# timeoutInMilliseconds: 1000
需要标注的重点 都在注释中;