文档:Spring Cloud Gateway
小结:
nacos :注册中心,解决服务的注册与发现
nacos :配置中心,配置文件中心化管理
Ribbon:客户端负载均衡器,解决微服务集群负载均衡的问题
Openfeign:声明式HTTP客户端,解决微服务之间远程调用问题
Sentinel:微服务流量防卫兵,以流量为入口,保护微服务,防止出现服务雪崩.
为什么使用网关
Springcloud-gateway简介
基于spring5、springboot2.0和Project Reactor等技术开发的网关,目的是为微服务架构系统提供高性能,且简单易用的api路由管理方式。
优点:
1:性能强劲,是第一代网关zuul的1.6倍
2:功能强大,内置很多实用功能如:路由、过滤、限流、监控等。
3:易于扩展。
gateway核心概念
gateway的工作流程
1:客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由
2:将其发送到 Gateway Web Handler。
3:Handler 再通过指 定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。
搭建网关
pom依赖
注意:不要依赖spring-boot-starter-web
<dependency>
<groupId>org.springfrawmework.boot</groupId>
<!--servlet编程模型、运行的服务器是tomcat-->
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
依赖如下:
<dependencies>
<!-- spring-cloud gateway,底层基于netty -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 端点监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- nacos注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
基本配置
配置文件采用.yml文件
server:
#gateway的端口
port: 8877
spring:
application:
name: cloud-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
启动类加@EnableDiscoveryClient注解
路由到微服务
静态路由
表示访问goods/**就是访问 http://localhost:9001/goods/
动态路由
加了一个li://goods 这个主要是搞微服务集群的如下图:
这时访问goods,就是访问两个集群轮询访问
server:
#gateway启动端口
port: 8877
spring:
cloud:
gateway:
routes:
#配置商品微服务
- id: goods
uri: lb://goods
predicates:
- Path=/goods/**
- id: orders
uri: http://localhost:9002/orders/
predicates:
- Path=/orders/**
nacos:
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
application:
name: gateway