GateWay的作用:反向代理、熔断、限流、日志监控
- 网关位置:
Route(路由):由ID、目标url、断言、过滤器组成
Predicate(断言):相当于匹配规则,当请求与断言匹配则进行路由
新建cloud-gateway-gateway9527模块作为网关,pom中拉取gateway依赖,配置启动类
我们将9527作为8001的网关,当我们访问8001服务时,9527可起到过滤器和隐藏8001端口、ip的作用
配置yml:端口、服务名称、开启网关、路由的id、url、断言(接口方法)
将9527、8001注册进入7001(网关、支付模块注册进eureka)
启动三个模块测试,未配置网关时访问8001的方法会暴露ip端口,配置网关后,暴露的是9527的ip端口
要做的是隐藏真实地址,暴露网关;这里使用http://localhost:9527/guonei可访问到https://news.baidu.com/guonei
在9527模块中编写配置类
之前80轮询负载访问8001、8002,使用了eureka+RestTemplate
现在例如访问8001服务需通过网关进行转发,转发到真实的服务地址,当有多个服务提供者时,同样是访问网关,网关转发到服务,这里如何使用网关实现负载均衡?
将8001、8002注册到7001服务注册中心
9527的pom中拉取eureka-client依赖
配置yml:8001和8002注册到eureka,因为都是提供者所以有一个共同的服务名称,指定了服务名称就能对名称下的服务进行负载;id是唯一的,对应一个接口方法,url对应服务的ip+端口,这里替换成服务名称,断言对应具体的方法名;同时需开启从注册中心创建路由的功能
uri的协议lb,表示启用Gateway的负载均衡功能
测试:浏览器输入:http://localhost:9527/payment/lb (前面部分表示暴露的网关,后面表是断言)访问服务提供者集群,实现负载
- Route Predicate Factories是一组断言匹配规则:
使用:在9527网关模块的yml中配置,如下就表示请求地址要是/payment/get开头,且在指定时间后才能访问
spring:
application:
name: cloud-gateway-service
cloud:
gateway:
routes:
- id: payment_routh
# uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- Path=/payment/get/**
- After=2021-01-01T15:12:12.789-07:00[America/Denver] # 需使用国内时间
在9527模块中新建一个过滤器类实现GlobalFilter,OrderId
在过滤器类中自定义放行规则即可
启动测试,发送请求,不符合要求的将被拦截