一.知识回顾
【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】
【1-系统架构演进过程】
【2-微服务系统架构需求】
【3-高性能、高并发、高可用的三高商城系统项目介绍】
【4-Linux云服务器上安装Docker】
【5-Docker安装部署MySQL和Redis服务】
【6-Git安装与配置过程、Gitee码云上创建项目、IDEA关联克隆的项目】
【7-创建商城系统的子模块并将修改后的信息使用Git提交到Gitee上】
【8-数据库表结构的创建&后台管理系统的搭建】
【9-前端项目的搭建部署、Node安装、VSCode安装】
【10-Node的安装以及全局环境变量的相关配置&解决启动报错的问题(1.Error: Cannot find module ‘fs/promises)(2.npm安装node-sass报错)】
【11-导入人人generator项目并自动生成相关的文件&商品子模块的调试&公共模块common子模块的抽离与实现&Lombok插件的安装】
【12-商品子模块整合MyBatisPlus技术&其它模块通过generator的自动生成与补充完善】
【13-项目中微服务组件的学习-SpringCloudAlibaba微服务生态体系的学习&SpringCloudAlibaba的依赖管理&项目中SpringBoot和SpringCloud版本的统一】
【14-微服务的注册中心与配置中心Nacos&Windows操作系统上安装Nacos和Linux操作系统上用Docker中安装Nacos&每个子项目模块使用Nacos进行服务注册与发现】
【15-项目中服务的远程调用之OpenFeign&订单模块与商品模块集成使用OpenFeign的案例】
【16-配置中心之Nacos的基本使用&Nacos服务之命令空间、Nacos服务之配置组、Nacos服务之配置拆分】
二.微服务网关Gateway
5.5.1 网关基本介绍
在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平台无关的服务协议作为各个单元间的通讯方式。
本系统中我们选择的是Gateway作为我们的网关组件,Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
网关由三个部分组成:
- Route(路由):这是网关的基本构建块,它由一个ID,一个目标URI,一组断言和一组过滤器定义,如果断言为真,则路由匹配
- Predicate(断言):是Java8中提供的函数式接口,用来判断是否路由匹配的
- Filter(过滤器):对断言匹配的请求和响应进行修改处理
路由断言工厂的分类:
全局过滤器分类:
三.Spring Cloud Gateway网关服务搭建
创建一个mall-gateway网关的模块
创建网关API服务,修改SpringBoot和SpringCloud相关版本和其他的微服务保持一致。然后添加对应的依赖
<dependency>
<groupId>com.ljw.mall</groupId>
<artifactId>mall-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
因为网关服务路由的时候需要去注册中心中发现相关的服务所以需要完成Nacos注册中心的配置
# 注册中心的配置
spring.application.name=mall-gateway
spring.cloud.nacos.discovery.server-addr=ip地址:8848
# 指定注册中心的服务端口
server.port=8070
主启动类放开注册中心的发现注解
配置网关的服务注册中心
配置网关Nacos的配置中心
application.yml配置文件进行路由的配置
# 注册中心的配置
spring:
application:
name: mall-gateway
cloud:
nacos:
discovery:
server-addr: Nacos服务的IP地址:8848
gateway:
routes:
- id: route1
uri: http://www.baidu.com
predicates:
- Query=url,baidu
- id: route2
uri: http:www.jd.com
predicates:
- Query=url,jd
server:
port: 8070
启动时候因为依赖的commons服务中有MyBatis的依赖,那么在网关API服务中也需要数据源的相关配置,那么没有就抛异常,对应如下的解决方案:
- gateway的pom文件中引入commons模块的相关依赖排除我们数据库的相关依赖;
- 这时我们可以在启动类的SpringBootApplication注解中排除DataSourceAutoConfiguration的自动注入。
/**
* TODO:网关和我们的数据库没有关系,所以再启动的时候排除相关的依赖
* @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
*/
@EnableDiscoveryClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(MallGatewayApplication.class, args);
}
}
然后根据对应的路由规则测试即可:
http://localhost:8070/?url=baidu
http://localhost:8070/?url=jd
好了,关于【17-微服务网关之Spring Cloud Gateway&Spring Cloud Gateway网关服务搭建】就先学习到这里,更多内容持续创作更新中,敬请期待。