Springboot整合GateWay+Nacos实现动态路由

 更新时间:2024年08月09日 09:52:17   作者:.小罗同学  
本文主要介绍了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 动态路由内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Javabean基于xstream包实现转XML文档的方法

    Javabean基于xstream包实现转XML文档的方法

    这篇文章主要介绍了Javabean基于xstream包实现转XML文档的方法,结合具体实例形式分析了xstream包用于转换xml文件的具体使用技巧,需要的朋友可以参考下
    2017-05-05
  • Hibernate的Annotation版Hello world实例

    Hibernate的Annotation版Hello world实例

    这篇文章主要介绍了Hibernate的Annotation版Hello world实现方法,详细分析了Annotation的具体使用步骤与Hello world实现方法,需要的朋友可以参考下
    2016-03-03
  • java并发编程Lock锁可重入性与公平性分析

    java并发编程Lock锁可重入性与公平性分析

    这篇文章主要为大家介绍了java并发编程Lock锁可重入性与公平性分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • maven 隐式依赖引起的包冲突解决办法

    maven 隐式依赖引起的包冲突解决办法

    这篇文章主要介绍了maven 隐式依赖引起的包冲突解决办法的相关资料,需要的朋友可以参考下
    2016-12-12
  • REST架构及RESTful应用程序简介

    REST架构及RESTful应用程序简介

    这篇文章主要为大家介绍了REST架构及RESTful的应用程序简介,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java实现游戏抽奖算法

    Java实现游戏抽奖算法

    这篇文章主要为大家详细介绍了Java实现游戏抽奖算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Java bat批处理命令启动jar包的操作方法

    Java bat批处理命令启动jar包的操作方法

    这篇文章主要介绍了JAVA bat批处理命令启动jar包,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • 解决JD-GUI for mac big sur打不开问题

    解决JD-GUI for mac big sur打不开问题

    这篇文章主要介绍了解决JD-GUI for mac big sur打不开问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java中如何正确重写equals方法

    Java中如何正确重写equals方法

    Object类中equals方法比较的是两个对象的引用地址,只有对象的引用地址指向同一个地址时,才认为这两个地址是相等的,否则这两个对象就不相等
    2021-10-10
  • Flowable历史查询实例分析

    Flowable历史查询实例分析

    这篇文章主要介绍了Flowable历史查询实例分析,历史是记录流程执行过程中发生的事情,并将其永久存储的组件,与运行时数据不同,历史数据在流程实例完成以后仍保存在数据库中,下面我们来深入了解
    2023-10-10

最新评论