网关本质上要提供一个各种服务访问的入口,并提供服务接收并转发所有内外部的客户端调用,还有就是权限认证,限流控制等等。Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 等技术开发的一个网关组件,它旨在为微服务架构提供一种简单有效的统一的 API入口,负责服务请求路由、组合及协议转换,并且基于 Filter 链的方式提供了权限认证,监控、限流等功能。
新建一个module项目,叫gateway
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>HandSomeAq_SSO</artifactId>
<groupId>com.hd</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gateway</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<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.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
</project>
yml文件:
server:
port: 9000
spring:
application:
name: sso-gateway
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yml
discovery:
server-addr: localhost:8848
gateway:
discovery:
locator:
enabled: true #开启通过服务中心的serviceId 创建路由的功能
routes:
- id: route01 #路由的id 唯一即可
uri: http://localhost:8081/ #路由帮我们转发的url
predicates:
- Path=/auth/** #断言,匹配请求规则
filters: #网关过滤器
- StripPrefix=1 # 1代表过滤一层url 即auth
- id: route02
uri: http://localhost:8082/
predicates:
- Path=/resource/**
filters:
- StripPrefix=1
路由(Route) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息:
id,路由标识符,区别于其他 Route。
uri,路由指向的目的地 uri,即客户端请求最终被转发到的微服务。
predicate,断言(谓词)的作用是进行条件判断,只有断言都返回真,才会执行路由。
filter,过滤器用于修改请求和响应信息。
用postman访问 http://localhost:9000/auth/login?username=admin&password=123 测试:
携带token访问 http://localhost:9000/resource/logs/getLogs/admin
负载均衡,应该有多个auth和resource服务器提供服务来构建负载均衡。
1、网关在注册中心注册。
2、auth和resource在注册中心注册。
3、网关通过DataId来进行服务的调用。
修改gateway的yml文件,将
#uri: http://localhost:8081/
uri: lb://sso-auth #从注册中心调用服务
#uri: http://localhost:8082/
uri: lb://sso-resource