Springboot整合GateWay+Nacos实现动态路由
1、简介
路由转发 + 执行过滤器链。
网关,旨在为微服务架构提供一种简单有效的统一的API路由管理方式。同时,基于Filter链的方式提供了网关的基本功能,比如:鉴权、流量控制、熔断、路径重写、黑白名单、日志监控等。
基本功能如下:
- 统一入口:暴露出网关地址,作为请求唯一入口,隔离内部微服务,保障了后台服务的安全性
- 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求
- 动态路由:动态的将请求路由到不同的后端集群中
2、gateway核心概念
路由(Route):由一个ID,一个目标URI(最终路由到的url地址),一组断言(匹配条件判断)和一组过滤器定义。如果断言为真,则路由匹配。
断言(Predicate):通过断言匹配http请求中的任何内容(请求头、请求参数等),如果匹配成功,则匹配断言所在路由。
过滤器(Filter):在请求前后执行业务逻辑,比如鉴权、日志监控、流量控制、修改请求头、修改响应等。
3、路由
spring: cloud: gateway: routes: - id: manager # 路由唯一标识 uri: lb://manager_server # 路由指向目的地URL或服务名,客户端请求最终被转发到的微服务 predicates: - Path=/manager/** # 断言:以manager开头的请求都负载到manager_server服务 filters: - RewritePath=/manager/(?<segment>.*), /$\{segment} # 过滤器:过滤掉url里的manager,例如http://ip:port/manager/test -> http://ip:port/test order: 5 # 用于多个Route之间的排序,数值越小越靠前,匹配优先级越高
4、实战练习
1、项目结构
2、依赖
1、父依赖
<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <dubbo.version>3.2.0-beta.4</dubbo.version> <spring-boot.version>2.6.11</spring-boot.version> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--springcloudalibaba--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.4.0</version> <type>pom</type> <scope>import</scope> </dependency> <!--nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2021.0.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2、服务提供者依赖(provider)
<dependencies> <!-- spring boot starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
3、网关依赖(gateway)
<dependencies> <!--gateway--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>3.1.2</version> </dependency> <!--Nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--客户端负载均衡loadbalancer--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.1.1</version> </dependency> </dependencies>
3、配置文件
1、服务提供者1配置(provider)
server: port: 9002 spring: application: name: SpringBoot-Nacos-Dubbo-provider #Nacos注册中心服务名称 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #Nacos注册中心地址
服务提供者2复制修改端口即可
2、gateway配置(路由配置方式1)
server: port: 8080 spring: application: name: gateway cloud: nacos: discovery: server-addr: localhost:8848 #注册到nacos中 gateway: routes: - id: gateway1 #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: http://localhost:9002 #匹配后提供服务的路由地址 predicates: - Path=/provider/** # 断言,路径相匹配的进行路由
4、服务提供者Controller
@RestController @RequestMapping("/provider") public class ProviderController { @Value("${server.port}") private String post; @GetMapping("/getpost") public String getPost(){ return "当前端口:"+post; } }
5、项目启动
启动服务提供者9002 浏览器访问localhost:8080/provider/getpost
6、gateway配置(路由配置方式2(动态配置))
负载均衡
传统模式
gateway
1、配置文件
server: port: 8080 spring: application: name: gateway cloud: nacos: discovery: server-addr: localhost:8848 #注册到nacos中 gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由 routes: - id: gateway1 #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: lb://SpringBoot-Nacos-Dubbo-provider #匹配后提供服务的名称 用于负载均衡 predicates: - Path=/provider/** # 断言,路径相匹配的进行路由
分别启动服务提供者9002、9001 浏览器访问localhost:8080/provider/getpost 实现负载均衡
到此这篇关于Springboot整合GateWay+Nacos实现动态路由的文章就介绍到这了,更多相关Springboot 动态路由内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Maven默认中央仓库(settings.xml 配置详解)
这篇文章主要介绍了Maven默认中央仓库(settings.xml 配置详解),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-12-12SpringBoot使用MockMvc进行Web集成测试的示例详解
MockMvc 是一个测试框架,可以模拟 HTTP 请求和响应,在本文中,我们将介绍如何使用MockMvc进行Web集成测试,以及如何编写测试用例来测试Spring MVC控制器,希望对大家有所帮助2023-06-06SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文主要介绍了SpringSecurity页面授权与登录验证实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-06-06
最新评论