展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

GateWay

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
在过滤器类中自定义放行规则即可
启动测试,发送请求,不符合要求的将被拦截
posted @ 2022-07-27 11:32  DogLeftover  阅读(45)  评论(0编辑  收藏  举报