引言:
SpringCloud Alibaba 系列目录
一、搭建SpringCloud工程,请前往:保姆级教程构建SpringCloud工程(图文结合)
二、集成服务注册配置管理中心Nacos,请前往:SpringCloud集成服务注册配置管理中心Nacos
三、集成HTTP客户端工具OpenFeign,请前往:SpringCloud集成HTTP客户端工具OpenFeign
四、集成统一网关SpringCloud Gateway,请前往:SpringCloud集成微服务API网关Gateway(详解)
集成统一网关Gateway
1.为什么需要网关和其作用?
- 路由转发: 网关可以作为所有客户端请求的入口,根据请求的URL路径将请求路由到相应的微服务实例。通过网关,可以将客户端请求分发到不同的微服务中,实现了微服务之间的解耦。
- 负载均衡: 网关可以对请求进行负载均衡,将请求分发到多个相同服务的实例中。这样可以提高系统的性能和可用性,并且有效地利用了系统资源。
- 安全认证: 网关可以作为安全认证的入口,对请求进行身份验证、授权和安全检查。通过网关,可以集中管理系统的安全策略,保护微服务免受未经授权的访问。
- 流量控制: 网关可以实现流量控制进行限流,限制对微服务的访问速率,防止突发流量对系统造成影响。可以基于请求频率、并发连接数等指标对流量进行控制和限制。
- 监控和日志: 网关可以记录所有的请求和响应信息,并且可以进行统一的监控和日志记录。这样可以方便开发人员进行故障排查、性能优化和系统分析。
2.技术实现
在SpringCloud中网关的实现有两种:
- Gateway 实现
- Zuul 实现
Zuul是基于Servlet的实现,属于阻塞式编程。
SpringCloud Gateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
3. 搭建网关服务
-
创建新的 cloud-gateway Module,引入SpringCloud Gateway的依赖及Nacos的服务注册与发现依赖
<dependencies> <!-- 网关依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!-- 服务注册与发现依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
-
在Gateway 的 resources 下新建 bootstrap.yml,配置路由和Nacos 服务注册与发现中心
这里如果创建的是bootstrap.yml的话,一定要引入 bootstrap的依赖,不然是不会进行识别和加载的,也可以不引入 bootstrap依赖,直接创建application.yml也是可以的
<!--bootstrap 启动器加载上下文--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
网关路由配置的内容包括:
- 路由Id:唯一的路由标识
- uri:目标路由地址,支持http和lb两种
- predicates:路由断言,判断请求是否符合规则,符合路由规则在进行转发到目标路由地址
- filters:路由过滤器,处理请求或者响应
# 服务端口 server: port: 10717 spring: application: # 服务名称 name: gateway profiles: active: dev main: # Description: # Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway. # Action: # Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency. #上述错误表明 SpringBoot 与 SpringCloud Gateway 不兼容, 设置属性为reactive 告诉Spring Boot使用响应式Web应用程序类型,与Spring Cloud Gateway兼容。 web-application-type: reactive # cloud: nacos: # Nacos服务地址 server-addr: localhost:8848 # Nacos的服务注册与发现 discovery: # Nacos服务地址 # server-addr: localhost:8848 # 配置集群名称,也就是机房位置,例如:HZ 杭州 cluster-name: HZ # Nacos可视化命名空间ID namespace: cdd2a801-3280-4476-8362-d46318aac1a3 gateway: routes: # 网关路由配置