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><!--GateWay1. 不能引入spring-boot-starter-web 和 spring-boot-starter-actuator否则出现冲突2. 因为gateway 是一个服务网关,不需要web...-->
<dependencies>
第二步、配置application.yml(重点核心):
server:port: 20000spring:application:name: e-commerce-gatewaycloud: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:10000predicates: #断言,可以有多种形式- Path=/member/get/** #断言,路径相匹配的进行路由- id: member_routh02 #路由的ID,程序员自己写,要求唯一uri: http://localhost:10000predicates: #断言,可以有多种形式#这是如果客户端/浏览器 访问 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-serviceclient:register-with-eureka: true #将自己注册到 eureka-Serverfetch-registry: trueservice-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 --》路由跳百度(外部网址)