SpringCloud GateWay
文章目录
- SpringCloud GateWay
- 1 Gateway 介绍
- 2 代码实现
1 Gateway 介绍
- 有一个前后端分离项目,分析如图
- 使用网关服务Gateway,重构项目架构
- Gateway 是在 Spring 生态系统之上构建的 API 网关服务,基于 Spring ,Spring Boot 和 Project Reactor 等技术。
- Gateway 旨在提供一种简单而有效的方式来对 API 进行路由,以及提供一些强大的过滤器功能,例如∶熔断、限流、重试等
Spring Cloud Gateway 基于 Spring Framework(支持 Spring WebFlux),Project Reactor 和 Spring Boot 进行构建,具有如下特性:
- 动态路由
- 可以对路由指定 Predicate(断言)和Filter(过滤器)
- 集成Hystrix的断路器功能
- 集成 Spring Cloud 服务发现功能
- 请求限流功能
- 支持路径重写
2 代码实现
第一步、导入依赖
<!--引入 cloud gataway 场景启动器starter-->
<dependencies>
<!--引入 cloud gataway 场景启动器starter-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--GateWay
1. 不能引入spring-boot-starter-web 和 spring-boot-starter-actuator
否则出现冲突
2. 因为gateway 是一个服务网关,不需要web...
-->
<dependencies>
第二步、配置application.yml(重点核心):
server:
port: 20000
spring:
application:
name: e-commerce-gateway
cloud:
gateway:
routes: #配置路由,可以有多个路由配置
- id: member_routh01 #路由的ID,程序员自己写,要求唯一
#gateway 最终访问的 url = uri+Path
#匹配后提供服务的路由地址,也可以是外网 uri,比如 http://www.baidu.com 等
#比如: 客户端/浏览器请求 url http://localhost:10000/member/get/1
#如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
#如果匹配失败,则有gateway返回404信息
uri: http://localhost:10000
predicates: #断言,可以有多种形式
- Path=/member/get/** #断言,路径相匹配的进行路由
- id: member_routh02 #路由的ID,程序员自己写,要求唯一
uri: http://localhost:10000
predicates: #断言,可以有多种形式
#这是如果客户端/浏览器 访问 gateway 的 url http://localhost:20000/member/save
#匹配Path成功 最终访问的 url 就是 http://localhost:10000/member/save
- Path=/member/save #断言,路径相匹配的进行路由
- id: member_routh03 #路由的ID,程序员自己写,要求唯一
uri: http://www.baidu.com # url访问外网
predicates: #断言,可以有多种形式
#这是如果客户端/浏览器 访问 gateway 的 url http://www.baidu.com/
#匹配Path成功 最终访问的 url 就是 http://www.baidu.com/
- Path=/
# eureka 客户端配置
eureka:
instance:
hostname: e-commerce-service
client:
register-with-eureka: true #将自己注册到 eureka-Server
fetch-registry: true
service-url:
# 这里使用 eureka server 单机环境测试
defaultZone: http://eureka9001.com:9001/eureka
第三步、创建主启动类 GateWayApplication20000.java
package com.xjz.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class GateWayApplication20000 {
public static void main(String[] args) {
SpringApplication.run(GateWayApplication20000.class,args);
}
}
第四步、测试
路由id:member_routh01
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pL3TPK11-1685631739888)(C:/Users/15100034221/AppData/Roaming/Typora/typora-user-images/image-20230601225620466.png)]
路由id:member_routh02
@RequestBody 的作用是: 将前端发送的 json 数据封装成对象, 如果发送的不是 json 数 据,会报错误
我们来看一下数据库,已经成功加入数据~
路由id:member_routh03 --》路由跳百度(外部网址)