文章内容输出来源:拉勾教育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
GateWayApplication9002
@SpringBootApplication
@EnableDiscoveryClient // 开启注册中心客户端 (通用型注解,比如注册到Eureka、Nacos等)
public class GateWayApplication9002 {
public static void main(String[] args) {
SpringApplication.run(GateWayApplication9002.class, args);
}
}
2.5 启动服务,则可以在nacos注册中心看到这个服务

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