关于gateway

什么是网关?

在日常生活中,我们可能看过古装剧,其中就有城墙和大门,网关就相当于这个大门,城里面有很多好吃的好玩的,但是你也只能先从大门进去才能去享受。同样的,在我们微服务架构的项目中, 有各种各样的模块,但是我们可以添加网关,就相当于设置大门了。

网关的主要功能有

  • 将所有请求统一经过网关
  • 网关可以对这些请求进行检查
  • 网关方便记录所有请求的日志
  • 网关可以统一将所有请求路由(分配)到正确的模块\服务上      

 网关也是一个模块,所以我们要使用的时候要新建一个项目模块,然后添加依赖

<dependencies>
    <!--   SpringGateway的依赖   -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!--   Nacos依赖   -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--   网关负载均衡依赖    -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>

然后配置yml配置文件

server:
  port: 9000
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        # 网关也是微服务项目的一部分,所以也要注册到Nacos
        server-addr: localhost:8848
    gateway:
      # routes就是路由的意思,下面的内容就是配置路由,它是一个数组类型的属性
      routes:
          # 数组类型属性赋值时,每个数组元素都要以"-"开头,一个"-"之后的所有内容,都是这个元素包含的值
          # id表示当前路由的名称,和之前出现过的任何名字没有关联,唯一的要求就是不能和之后出现的路由id重复
        - id: gateway-beijing
          # uri配置路由的目标服务器,beijing是服务器注册到nacos的名称
          # lb就是LoadBalance的缩写
          uri: lb://beijing
          # predicates是断言的意思,指满足某些条件的之后执行某些操作
          predicates:
            # predicates属性也是数组类型,赋值要以"-"开头
            # 这个断言的含义就是如果访问网关项目的路径以/bj/开头,路由访问beijing服务器
            # ↓ P要大写     **是通配任何路径
            - Path=/bj/**

 然后就可以启动项目了,注意其他的项目先起,网关最后起,道理也很好理解,门应该在最外面所以最后建造

注意!!哪个模块需要加入就必须添加依赖个配置

然后再配置网关的

server:
  port: 9000
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        # 网关也是微服务项目的一部分,所以也要注册到Nacos
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          # 开启网关动态路由的配置
          # 默认的路由规则:在网关端口号后,先编写要路由到的目标服务器
          #              注册到Nacos的名称,再编写要访问的具体路径
          # 例如 localhost:9001/bj/show  ->  localhost:9000/beijing/bj/show
          enabled: true

动态路由:

上面的所有项目模块都需要在配置文件中指定路径来路由,非常的不萤杏花,可以通过动态路由让他自己找,我么就不用手动配了。

server:
  port: 9000
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        # 网关也是微服务项目的一部分,所以也要注册到Nacos
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          # 开启网关动态路由的配置
          # 默认的路由规则:在网关端口号后,先编写要路由到的目标服务器
          #              注册到Nacos的名称,再编写要访问的具体路径
          # 例如 localhost:9001/bj/show  ->  localhost:9000/beijing/bj/show
          enabled: true

 可以通在配置文件中这样配置完成他自动路由。

断言:断言的意思就是判断某个条件是否满足,不满足就访问不了,可以配很多东西(

  • after           在什么时间之后可以访问
  • before       时间之前
  • between    时间之间
  • cookie       携带什么cookie
  • header      携带什么请求头
  • method     用的什么请求方式
  • path          路径
  • query        指定参数,必须有     
  • routes:
      - id: gateway-shanghai
        uri: lb://shanghai
        predicates:
          - Path=/sh/**
          # Query断言判断请求中是否包含指定的参数名称(username)的参数,如果不包含就发生404错误
          - Query=username
           

其他还有一些不常用的,可以看看别的文章完成cv(哈哈)

过滤器:

这个过滤器在mvc过滤器链之前,而且可以通过这个过滤器加工,比如说加个参数

routes:
  - id: gateway-shanghai
    uri: lb://shanghai
    filters:
      - AddRequestParameter=age,18

也可以有其他功能,使用到我再更新。

因为网关也带了一个网页,就像tomcat,这俩就会冲突。我们在配置文件中可以通过配置解决。

spring:
  main:
    web-application-type: reactive

 以上知识仅作为个人参考。如果有需要补充和指正的地方欢迎各位大佬不吝赐教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值