天天看点

从0到1学SpringCloud第八篇:API网关

文章内容输出来源:拉勾教育Java高薪训练营

1. 前言

1.1 说明

现在我们是有三个服务:邮箱、验证码、用户。每个服务都有自己的请求端口。本文我们将引入GateWay网关,做为整个项目的访问入口,然后将流量转发至对应的服务。

1.2 什么是GateWay

GateWay是Spring Cloud的⼀个全新项⽬,⽬标是取代Netflix Zuul,它基于Spring5.0+SpringBoot2.0+WebFlux等技术开发。GateWay天⽣就是异步⾮阻塞的,基于Reactor模型。

当用户发送一个请求,首先会经过网关,网关根据路由的规则进行匹配,然后将请求转发到指定的服务地址。在这一个过程中,我们还可以做一些像限流、日志、黑白名单等功能。

它主要包括了三大部分:

  • 路由(route): ⽹关最基础的部分,也是⽹关⽐较基础的⼯作单元

    路由由⼀个ID、⼀个⽬标URL(最终路由到的地址)、⼀系列的断⾔(匹配条件判断)和Filter过滤器(精细化控制)组成

  • 断⾔(predicates):通过断言可以匹配Http请求中的所有内容(包括请求头、请求参数等),如果断⾔与请求相匹配则路由
  • 过滤器(filter):⼀个标准的Spring webFilter,使⽤过滤器,可以在请求之前或者之后执⾏业务逻辑

2. 创建网关项目

2.1 创建网关项目

  • 创建一个maven的模块

    lagou-cloud-gateway-9002

2.2 在pom.xml中引入依赖

  • 引入网关的依赖以及webflux。因为要把网关项目也在Nacos注册中心中注册,所以也引入Nacos的相关依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<!--引入webflux-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
           

2.3 创建配置文件application.yml

  • 配置端口为9002
  • 配置应用名称为

    lagou-cloud-gateway

  • 配置Nacos注册中心
  • 配置网关的路由规则,包括了验证码、用户、邮箱三部分的规则。三者都是后端API,因此在Path访问地址上多加了一个 /api 的前缀。然后就要把StripPrefix设置为1
server:
  port: 9002
spring:
  application:
    name: lagou-cloud-gateway
  cloud:
    # nacos配置
    nacos:
      discovery:
        # Nacos 注册中心配置地址(无需配置 HTTP 协议部分),多个用,隔开
        server-addr: 127.0.0.1:8848
    gateway:
      routes:
        - id: service-code-router # 我们自定义的路由 ID,保持唯一
          uri: lb://lagou-service-code
          # 断言:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默 认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
          predicates:
            - Path=/api/codes/**
          filters:
            - StripPrefix=1
        - id: service-user-router
          uri: lb://lagou-service-user
          predicates:
            - Path=/api/users/**
          filters:
            - StripPrefix=1
        - id: service-email-router
          uri: lb://lagou-service-email
          predicates:
            - Path=/api/emails/**
          filters:
            - StripPrefix=1

           

2.4 创建启动类

GateWayApplication9002

@SpringBootApplication
@EnableDiscoveryClient // 开启注册中心客户端 (通用型注解,比如注册到Eureka、Nacos等)
public class GateWayApplication9002 {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication9002.class, args);
    }

}
           

2.5 启动服务,则可以在nacos注册中心看到这个服务

从0到1学SpringCloud第八篇:API网关

3. 修改nginx的配置

3.1 修改nginx的配置文件

  • 将原先的三个服务的反向代理配置修改为网关服务的反向代理配置
  • 去掉原先三个服务的匹配规则,增加 /api 的匹配规则
http {
    include       mime.types;
    default_type  application/octet-stream;
    
    upstream cloud-server {
        server 127.0.0.1:9002;
    }

    server {
        listen       80;
        server_name  www.test.com;
        access_log  /logs/nginx/cloud.access.log;
        location ^~ /api {
            proxy_pass http://cloud-server; 
        }

        location ^~ /static {
            root /上层文件夹的绝对路径/v2.0/user-cloud/lagou-static-web;
        }
    }
}
           

3.2 重启nginx

4. 修改静态页面的ajax请求

  • 修改登录、注册、欢迎页面中的ajax请求,在url请求地址增加上 /api 的前缀

5. 参考代码

  • user-cloud

继续阅读