入门级微服务项目搭建:六、集成Gateway
Gateway俗称网关,我平常喜欢叫它门卫大爷。平常的单体项目访问接口,都是直接通过暴露出来的路径进行访问。而在微服务中则有所不同,我们不直接访问服务,而是通过Gateway来访问服务,我们的请求先到Gateway中,然后再转到具体服务中去。听起来有点像nginx,所以介于这样的工作形式,我才会将Gateway亲切的称为门卫大爷。
Gateway原理我就不在这里过多的赘述了,直接开始集成Gateway的实战吧。
1.新建网关服务
新建项目mall-cloud-gateway,新建过程和之前的一样,最终的结构如下图所示:
2.修改网关服务的pom文件
pom文件的内容如下图所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.wcc</groupId>
<artifactId>mall-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.wcc</groupId>
<artifactId>mall-cloud-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mall-cloud-gateway</name>
<description>mall-cloud-gateway</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--nacos注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.修改顶级父工程的pom文件
<modules>
<module>mall-cloud-system</module>
<module>mall-cloud-common</module>
<module>mall-cloud-gateway</module>
</modules>
4.修改yml文件
-
修改application.yml文件
server: port: 9000 spring: application: name: mall-cloud-gateway
-
新增bootstrap.yml文件
spring: application: name: mall-cloud-gateway cloud: nacos: discovery: server-addr: localhost:8848 namespace: 65c5f8cb-1afd-420a-b725-f24cedc22475 config: server-addr: localhost:8848 namespace: 65c5f8cb-1afd-420a-b725-f24cedc22475 file-extension: yml
5.Nacos新增Gateway服务的配置文件
将Gateway的路由配置放在nacos中比较方便,在修改了nacos上的路由配置后,程序会实时更新Nacos中的路由配置,而不需要重启项目,十分便捷。而Gateway的路由配置规则有蛮多的就不一一介绍了,你可以找一篇专门讲解Gateway的文章进行学习,本文只简单集成Gateway。
配置内容如下所示:
spring:
cloud:
gateway:
# 打印请求日志(自定义)
requestLog: true
discovery:
locator:
enabled: true
routes:
# 认证中心
- id: system-user
uri: lb://system-user
predicates:
- Path=/user/**
filters:
# 去除第一级路径
- StripPrefix=1
最终获得如下所示的配置文件:
6.启动类加上@EnableDiscoveryClient注解
7.测试Gateway是否生效
- 将用户服务和网关服务都启动起来
- 启动apifox通过Gateway访问用户服务
通过上述结果可知,Gateway已经被集成到项目中,并且能够正常生效了。