一、网关基本概念
(一)网关功能
- 身份认证和权限校验
- 服务路由、负载均衡
- 请求限流
(二)网关技术选型
SpringCloud提供了两个组件都可以实现网关功能:
- gateway
- zuul
其中,Zuul是基于Servlet的实现,属于阻塞式编程;而Gatwway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
二、搭建网关
搭建网关服务的步骤:
(一)在父项目上点击鼠标右键选择new→Module:
过程同本专栏前述文章,略过不表,子项目的文件结构如下:
(二)引入SpringCloudGateway的依赖和Eureka的服务发现依赖pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
(三)编写启动类GatewayApplication.java
package cn.it32.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args){
SpringApplication.run(GatewayApplication.class,args);
}
}
(四)gateway服务注册及路由配置:application.yml
server:
port: 10010 #服务端口
spring:
application:
name: gateway #服务名称
cloud:
gateway:
routes: #网关路由配置
- id: user-service #路由标识,必须唯一
uri: lb://userservice #路由的目标地址
predicates: #路由断言,判断请求是否符合规则
- Path=/user/** #路由断言:判断路径是否是以/user开头,如果是则符合
- id: order-service #路由标识,必须唯一
uri: lb://orderservice #路由的目标地址
predicates: #路由断言,判断请求是否符合规则
- Path=/order/** #路由断言:判断路径是否是以/order开头,如果是则符合
eureka:
client:
service-url: #eureka服务地址
defaultZone: http://127.0.0.1:10086/eureka
三、启动测试
顺次启动Eureka、user、Order、gateway服务,通过网关访问userservice,如下:
由此可见,已成功通过网关访问到了user服务。
此时Eureka注册中心的视图如下,总共注册了4个服务:
四、总结
网关搭建步骤:
1、引入依赖,包括Eureka服务注册和gateway依赖
2、配置application.yml,包括服务基本信息、Eureka地址、路由
路由配置规则包括:
1、路由ID:路由的唯一标识
2、路由目标uri:路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
3、路由断言predicates:判断路由的规则
4、路由过滤器filters:对请求或响应做处理