Springboot整合GateWay+Nacos实现动态路由
作者:.小罗同学
本文主要介绍了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 动态路由内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!