快速入门
# 服务网关
由于微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题
- 客户端会多次请求不同的微服务,增加了客户端的复杂性
- 存在跨域请求,在一定场景下处理相对复杂
- 认证复杂,每个服务都需要独立认证
- 难以重构,随着项目的迭代,可能需要重新划分微服务
- 如可能将多个服务合并成一个或者将一个服务拆分成多个
- 如果客户端直接与微服务通信,那么重构将会很难实施
- 某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难
以上这些问题可以借助 API 网关解决
API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过API 网关这一层
- API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做
- 既提高业务灵活性又不缺安全性
# 关于Spring Cloud Gateway
- 是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关
- Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式
- 作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul
- 提供统一的路由方式
- 基于Filer链的方式提供了网关基本的功能
- 如:安全、监控/埋点、限流等
# 搭建
# 配置pom
<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>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 配置application.properties
# 服务端口
server.port=80
# 服务名
spring.application.name=xxx
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 添加启动类
package com.s.yygh;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
Last Updated: 2022/01/16, 11:29:51