Srping cloud gateway 实现动态路由(MySQL持久化+redis分布式缓存) 最新

落爺英雄遲暮 提交于 2020-10-03 13:29:22

摘要

本文讲解在Spring Cloud 中如何通过MySQL和redis实现动态路由配置,以及路由信息持久化在MySQL中,同时使用Redis作为分布式路由信息缓存。


正文

Sping Cloud gateway 中自己集成了一套基于配置文件的一套路由规则,该规则需要配置在application.yml/properties文件中,如果在使用配置文件时想要动态化实现路由配置,需要网关结合Spring cloud config一起来使用(路由配置在config配置中心中,随着config修改路由信息,gateway会自动刷新而不需要重启刷新路由)。

本文将会在上述基础之上修改路由的存储方式为MySQL,并且把路由信息缓存在redis中,当数据库中的路由信息发生变化时, 可以主动通知网关去重新加载路由信息。

我们在使用此方法改造前,请去掉您的配置文件中配置的路由规则

注意,本部分代码需要使用的部分依赖为:

<!-- ali json依赖 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.47</version>
</dependency>
<!-- gateway -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>		
<!--redis依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lombok -->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>

首先我们需要实现接口,重写路由加载方法(详细代码请看原文)

RouteDefinitionRepository

上述代码中,提供了从redis加载路由信息到Flux中,新增路由(redis)、删除路由(redis)的方法。

下面为项目初始化时加载数据库的路由到redis,以及查询所有路由信息( 从redis)、刷新Flux中路由信息的方法,此类需要实现(详细代码请看原文)

ApplicationEventPublisherAware, CommandLineRunner

同时还包含实体类、表结构、以及访问controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!