摘要
本文讲解在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
来源:oschina
链接:https://my.oschina.net/guopengfei/blog/4380785