开发者学堂课程【Spring Cloud Alibaba Nacos 详解(下):实现 Gateway 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/725/detail/12945
实现 Gateway
内容介绍:
一、Zuul 介绍
二、搭建网关工程
一、Zuul 介绍
什么是网关?
原来的单体架构,所有的服务都是本地的, UI 可以直接调用,现在按功能拆分成独立的服务,跑在独立的一般都在独立的虚拟机上的 Java 进程了。
客户端 UI 如何访问?他的后台有 N 个服务,前台就需要记住管理N个服务,一个服务下线/更新/升级,前台就要重新部署,这明显不服务我们拆分的理念,特别当前台是移动应用的时候,通常业务变化的节奏更快。另外, N 个小服务的调用也是一个不小的网络开销。
有了网关作为服务统一入口 ,就可以避免上述问题,不仅如此,服务网关是在微服务前边设置-道屏障,请求先到服务网关,网关会对请求进行过虑、校验、路由等处理。
有了服务网关可以提高微服务的安全性,网关校验请求的合法性,请求不合法将被拦截,拒绝访问。
●提供统一服务入口,让微服务对前台透明
●聚合后台的服务,节省流量,提升性能
●提供安全,过滤,流控等API管理功能
什么是 Zuul ?
Spring Cloud Zuu l是整合 Netflix 公司的 Zuu 开源项目实现的微服务网关,它实现了请求路由、负载均衡、校验过虑等功能。
Zuul 与 Nginx 怎么配合使用?
Zuul 与 Nginx 在实际项目中需要配合使用,如下图, Nginx 的作用是反向代理、负载均衡, Zuul 的作用是保障微服务的安全访问,拦截微服务请求,校验合法性及负载均衡。
二、搭建网关工程
1.初始化 api-gateway Maven 工程
<dependency>
<groupId>com. Alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos -config</
artifactId>
</dependency>
<dependency>
<groupId>com. alibaba. cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot - starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
2.api-gateway 配置
要配置一个文件叫 bootstrap:
server:
port: 56010 #
启动端口 命令行注入
spring:
application:
name: api-gateway
main:
allow-bean-definition-overriding: true # Spring Boot 2.1
需要设定
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: c67e4a97-a698-4d6d-9bb1-cfac5f5b51c4
cluster-name: DEFAULT
config:
server-addr: 127.0.0.1:8848 #
配置中心地址
file-extension: yaml
namespace
:c67e497-a698-4d6d-9bb1-cfac5f5b51c4 #开发环境
group
:NACOS_MICROSERVICE_GROUP # xx业务组
网关的路由配置采用 nacos 远程配置,在 nacos 控制台开发环境中新增api-gateway.yaml 配置,配置组为 TEST_GROUP,配置内容如下:
zuul:
routes:
application1:
stripPreFix
:false
path
:/application1/**
将请求为 /application/ 开头的请求路由至 application1 服务,保留请求中 url 中的/application/。
我们可以直接在 nacos 上配置路由,配置内容如上。
3.api-gateway 启动
注意在启动类上使用 @EnableZuulProxy 注解标识此工程为 Zuul 网关,启动类代码如下:
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProFy
public class ApiGatewayBootstrap {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayBootstrap.class, args);
}
当 Service1Bootstrap 启动后,应用 api-gateway 将出现在 Nacos 服务列表中。
我们请求56010,会得到下图结果,说明网关起作用了