一止长渊

Gateway网关

N 人看过
字数:598字 | 预计阅读时长:2分钟

网关的意义在于

  • 在控制界面对所有服务集群进行管理时,如果某个服务挂了,我们不可能还在控制界面的后台修改代码将请求转向另一个服务的端口号
  • 利用网关可以进行鉴权,然后将服务转发给后端集群,避免了每个服务都要编写鉴权这一步
  • 服务发现注册、服务熔断、过滤、匹配请求

截屏2021-03-14 20.28.04.png

image.png
核心概念:

  • 路由:发送请求给网关,网关要将请求路由到指定的服务 uri。路由有 id,目的地 uri,断言的集合,匹配了断言就能到达指定位置 uri
  • 断言:匹配请求里的任何信息,例如请求参数或者请求头
  • 过滤:可以允许以某种方式对进入网关或出网关的 HTTP 请求进行修改

客户端发请求给服务端,中间有网关。先交给映射器,如果能处理就交给 handler 处理,然后交给一系列 filer,然后给指定的服务,再返回回来给客户端。
image.png
例如下面我们将根据请求参数 url 来连接到对应的地址,例如 url 参数是 qq 就连接到www.qq.com,如果url参数是baidu就连接到www.baidu.com

参考https://docs.spring.io/spring-cloud-gateway/docs/2.2.7.RELEASE/reference/html/#the-query-route-predicate-factory中的 Query Route 断言

  1. 首次网关模块,新建模块是指定 Gateway 依赖
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
  </dependency>
  1. 在 application.yml 需要开启服务注册发现,指定 Nacos 中心地址,这样网关才知道 Nacos 注册中心有哪   些服务在什么地方,才能将请求交给哪个服务
  2. 在启动类上添加@EnableDiscoveryClient 注解
  3. 编写断言策略

路由的每个 id 都要不同,-是 yml 中数组的语法,如果请求参数中 url 是 baidu,则路由到指定的 uri 中

# 开启服务注册
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

      application:
            name: doermail-member

    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
server:
  port: 88
  1. 测试发送请求给网关 localhost:88?url=baidu

截屏2021-03-14 23.34.28.png截屏2021-03-14 23.38.43.png

  1. 如果请求路由中有路径,则也会进行转发,例如 localhost:88/hello?url=baidu,则会转发到www.baidu.com/hello

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。