CN115567442A - 一种实现Spring Cloud动态路由的方法及装置 - Google Patents
一种实现Spring Cloud动态路由的方法及装置 Download PDFInfo
- Publication number
- CN115567442A CN115567442A CN202211081653.8A CN202211081653A CN115567442A CN 115567442 A CN115567442 A CN 115567442A CN 202211081653 A CN202211081653 A CN 202211081653A CN 115567442 A CN115567442 A CN 115567442A
- Authority
- CN
- China
- Prior art keywords
- routing
- gateway
- route
- information
- class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000013507 mapping Methods 0.000 claims abstract description 4
- 230000006870 function Effects 0.000 claims description 8
- 230000006399 behavior Effects 0.000 claims description 3
- 238000012800 visualization Methods 0.000 claims description 3
- 238000012937 correction Methods 0.000 claims description 2
- 238000013461 design Methods 0.000 claims description 2
- 238000004883 computer application Methods 0.000 abstract description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/66—Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及计算机应用技术领域,具体提供了一种实现SpringCloud动态路由的方法,在网关启动时,客户端向Spring CloudGateway发出请求,根据RouteLocator获取到RouteDefinitionLocator,并返回了多个RouteDefinitionLocator.getRouteDefinitions()的路由定义信息;如果在Gateway Handler Mapping中找到与请求相匹配的路由,会将其发送到Gateway Web Handler。Handler如FilteringWebHandler,执行路由定义中的过滤器链来将请求进行过滤,最后路由到具体的业务服务中。与现有技术相比,本发明扩展了RouteDefinitionRepository类获取路由配置信息的方式,将动态路由持久化存储。
Description
技术领域
本发明涉及计算机应用技术领域,具体提供一种实现Spring Cloud动态路由的方法及装置。
背景技术
Spring Cloud Gateway作为Spring Cloud生态系统中的网关,不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,负责服务请求路由、组合及协议转换,客户端的所有请求都首先经过API网关,然后由它将匹配的请求路由到合适的微服务,是系统流量的入口。
Spring Cloud Gateway的路由配置,常用Fluent API以及配置文件两种方式。这两者因为配置文件的方式修改起来较为灵活,还可以通过流的方式来手动刷新路由配置。
在实际生产环境中,为了保证高可靠和高可用,会尽量避免重启网关服务,这时如果有新的服务要上线,或者需要修改不同服务关于权重的断言,就需要通过动态路由配置功能,来动态的刷新路由配置。一种更为灵活、快速的动态路由是开发者所需要的。
发明内容
本发明是针对上述现有技术的不足,提供一种实用性强的实现Spring Cloud动态路由的方法。
本发明进一步的技术任务是提供一种设计合理,安全适用的实现Spring Cloud动态路由的装置。
本发明解决其技术问题所采用的技术方案是:
一种实现Spring Cloud动态路由的方法,在网关启动时,客户端向Spring CloudGateway发出请求,根据RouteLocator获取到RouteDefinitionLocator,并返回了多个RouteDefinitionLocator.getRouteDefinitions()的路由定义信息;
如果在Gateway Handler Mapping中找到与请求相匹配的路由,会将其发送到Gateway Web Handler。Handler如FilteringWebHandler,执行路由定义中的过滤器链来将请求进行过滤,最后路由到具体的业务服务中。
进一步的,路由信息默认是加载到内存的,并被封装到RouteDefinition对象中,多个类似的RouteDefinition对象组成了gateway的路由;
类GatewayControllerEndpoint提供了网关配置的RESTful接口,默认状态为未开启。
进一步的,使用Mysql数据库,设计路由管理的Mysql表结构,添加字段区分gateway集群的不同路径,并将路由使用Json格式存储。
进一步的,对Spring Cloud Gateway自带的RouteDefinitionRepository类进行扩展,RouteDefinitionRepository类继承于RouteDefinitionWriter路由配置写入接口类与RouteDefinitionLocator存储器类,实现从存储器读取、保存、删除路由配置的功能。
进一步的,重写RouteDefinitionRepository类时,需要实现getRouteDefinitions()方法,由默认的从Config Server中取得路由信息改为由redis中读取路由配置,获取到路由对象后,转换为Json格式以便进行存取操作。
进一步的,添加RedisMessageListenerContainer来订阅刷新信息,RedisMessageListenerContainer是为Redis消息侦听器MessageListener提供异步行为的容器,使用redis的发布订阅广播模式。
进一步的,在ChannelTopic中配置订阅信息的key值,并在RedisMessageListenerContaine类中获取订阅到的message信息,同时调用routeService.publishRefreshEvent()方法,实现网关集群路由的刷新。
进一步的,提供RESTful API接口,并开启定时任务,配置时间间隔,定时拉取并匹配提供接口中的路由信息,若无法匹配则抛出异常,保证路由配置信息的及时更新和纠正。
进一步的,针对Json格式的路由配置,使用Json Viewer可视化工具进行展示,配置前端页面查看当前路由信息,并操作路由配置信息。
一种实现Spring Cloud动态路由的装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种实现Spring Cloud动态路由的方法。
本发明的一种实现Spring Cloud动态路由的方法及装置和现有技术相比,具有以下突出的有益效果:
本发明扩展了RouteDefinitionRepository类获取路由配置信息的方式,将动态路由持久化存储。简化了动态路由刷新操作,添加redis订阅路由的刷新信息,将刷新路由时各集群实例需调用的refresh端口进行统一。
提供RESTful风格的增删改查路由信息接口,操作简便,便于调用进行路由配置信息的操作。提供接口对应的前端可视化页面操作,对于Json格式的路由信息,使用JsonViewer可视化工具进行展示,便于操作和理解。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种实现Spring Cloud动态路由的方法的流程示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
如图1所示,本实施例中的一种实现Spring Cloud动态路由的方法,在网关启动时,客户端向Spring Cloud Gateway发出请求,根据RouteLocator获取到RouteDefinitionLocator,并返回了多个RouteDefinitionLocator.getRouteDefinitions()的路由定义信息。如果在Gateway Handler Mapping中找到与请求相匹配的路由,会将其发送到Gateway Web Handler。Handler如FilteringWebHandler,执行路由定义中的过滤器链来将请求进行过滤,最后路由到具体的业务服务中。路由信息默认是加载到内存的,并被封装到RouteDefinition对象中,多个类似的RouteDefinition对象组成了gateway的路由。
类GatewayControllerEndpoint提供了网关配置的RESTful接口,默认状态为未开启。通过以上叙述实现动态路由的功能。
持久化存储路由相关配置,使用Mysql数据库,设计路由管理模块的Mysql表结构。添加字段区分gateway集群的不同路径,并将路由使用Json格式存储。
对Spring Cloud Gateway自带的RouteDefinitionRepository类进行扩展,使之在原先支持JVM级别路由的基础上,实现持久化的动态路由。RouteDefinitionRepository类继承于RouteDefinitionWriter路由配置写入接口类与RouteDefinitionLocator存储器类,实现该接口,就可以实现从存储器读取、保存、删除路由配置的功能。重写RouteDefinitionRepository类时,需要主要实现getRouteDefinitions()方法,此方法继承于RouteDefinitionLocator接口,此方法是获取RouteDefinition的核心方法,可以据此获取到所需的路由对象。扩展此类,由默认的从Config Server中取得路由信息改为由redis中读取路由配置,获取到路由对象后,转换为Json格式以便进行存取操作。
为了配合路由管理模块需要实现网关集群的刷新路由配置,需要添加RedisMessageListenerContainer来订阅刷新信息,RedisMessageListenerContainer是为Redis消息侦听器MessageListener提供异步行为的容器,使用redis的发布订阅广播模式。在ChannelTopic中配置订阅信息的key值,并在RedisMessageListenerContaine类中获取订阅到的message信息,同时调用routeService.publishRefreshEvent()方法,实现网关集群路由的刷新。
提供RESTful API接口,提供对应的创建路由、修改路由、删除路由、获取路由信息、刷新路由等功能。并开启定时任务,配置时间间隔,定时拉取并匹配提供接口中的路由信息,若无法匹配则抛出异常,以便保证路由配置信息的及时更新和纠正。
为接口提供对应的可操作前端页面,针对Json格式的路由配置,使用Json Viewer可视化工具进行展示。配置前端页面查看当前路由信息,并操作进行对路由配置信息的增删改查、刷新缓存等功能。通过以上解决路由配置存储分散的问题,不需要一对一调用每个服务实例的refresh端口,就可以实现路由的持久化存储和统一刷新。
一种实现Spring Cloud动态路由的装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种实现Spring Cloud动态路由的方法。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种实现Spring Cloud动态路由的方法及装置权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (10)
1.一种实现Spring Cloud动态路由的方法,其特征在于,在网关启动时,客户端向Spring Cloud Gateway发出请求,根据RouteLocator获取到RouteDefinitionLocator,并返回了多个RouteDefinitionLocator.getRouteDefinitions()的路由定义信息;
如果在Gateway Handler Mapping中找到与请求相匹配的路由,会将其发送到GatewayWeb Handler。Handler如FilteringWebHandler,执行路由定义中的过滤器链来将请求进行过滤,最后路由到具体的业务服务中。
2.根据权利要求1所述的一种实现Spring Cloud动态路由的方法,其特征在于,路由信息默认是加载到内存的,并被封装到RouteDefinition对象中,多个类似的RouteDefinition对象组成了gateway的路由;
类GatewayControllerEndpoint提供了网关配置的RESTful接口,默认状态为未开启。
3.根据权利要求2所述的一种实现Spring Cloud动态路由的方法,其特征在于,使用Mysql数据库,设计路由管理的Mysql表结构,添加字段区分gateway集群的不同路径,并将路由使用Json格式存储。
4.根据权利要求3所述的一种实现Spring Cloud动态路由的方法,其特征在于,对Spring Cloud Gateway自带的RouteDefinitionRepository类进行扩展,RouteDefinitionRepository类继承于RouteDefinitionWriter路由配置写入接口类与RouteDefinitionLocator存储器类,实现从存储器读取、保存、删除路由配置的功能。
5.根据权利要求4所述的一种实现Spring Cloud动态路由的方法,其特征在于,重写RouteDefinitionRepository类时,需要实现getRouteDefinitions()方法,由默认的从Config Server中取得路由信息改为由redis中读取路由配置,获取到路由对象后,转换为Json格式以便进行存取操作。
6.根据权利要求5所述的一种实现Spring Cloud动态路由的方法,其特征在于,添加RedisMessageListenerContainer来订阅刷新信息,RedisMessageListenerContainer是为Redis消息侦听器MessageListener提供异步行为的容器,使用redis的发布订阅广播模式。
7.根据权利要求6所述的一种实现Spring Cloud动态路由的方法,其特征在于,在ChannelTopic中配置订阅信息的key值,并在RedisMessageListenerContaine类中获取订阅到的message信息,同时调用routeService.publishRefreshEvent()方法,实现网关集群路由的刷新。
8.根据权利要求7所述的一种实现Spring Cloud动态路由的方法,其特征在于,提供RESTful API接口,并开启定时任务,配置时间间隔,定时拉取并匹配提供接口中的路由信息,若无法匹配则抛出异常,保证路由配置信息的及时更新和纠正。
9.根据权利要求8所述的一种实现Spring Cloud动态路由的方法,其特征在于,针对Json格式的路由配置,使用Json Viewer可视化工具进行展示,配置前端页面查看当前路由信息,并操作路由配置信息。
10.一种实现Spring Cloud动态路由的装置,其特征在于,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1至9中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211081653.8A CN115567442A (zh) | 2022-09-06 | 2022-09-06 | 一种实现Spring Cloud动态路由的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211081653.8A CN115567442A (zh) | 2022-09-06 | 2022-09-06 | 一种实现Spring Cloud动态路由的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115567442A true CN115567442A (zh) | 2023-01-03 |
Family
ID=84738723
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211081653.8A Pending CN115567442A (zh) | 2022-09-06 | 2022-09-06 | 一种实现Spring Cloud动态路由的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115567442A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3026851A1 (en) * | 2014-11-27 | 2016-06-01 | Alcatel Lucent | Apparatus, network gateway, method and computer program for providing information related to a specific route to a service in a network |
CN111669292A (zh) * | 2020-06-19 | 2020-09-15 | 普元信息技术股份有限公司 | 微服务架构下实现网关动态路由控制的方法 |
CN111818182A (zh) * | 2020-08-31 | 2020-10-23 | 四川新网银行股份有限公司 | 一种基于Spring cloud gateway的微服务编排和数据聚合的方法 |
CN112260876A (zh) * | 2020-10-26 | 2021-01-22 | 欧冶云商股份有限公司 | 动态网关路由配置方法、平台、计算机设备及存储介质 |
CN112804722A (zh) * | 2020-12-31 | 2021-05-14 | 浪潮云信息技术股份公司 | 一种微服务网关动态路由的实现方法 |
CN113794636A (zh) * | 2021-08-11 | 2021-12-14 | 科大国创云网科技有限公司 | 一种基于Spring Cloud Gateway实现的动态路由编排方法及系统 |
-
2022
- 2022-09-06 CN CN202211081653.8A patent/CN115567442A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3026851A1 (en) * | 2014-11-27 | 2016-06-01 | Alcatel Lucent | Apparatus, network gateway, method and computer program for providing information related to a specific route to a service in a network |
CN111669292A (zh) * | 2020-06-19 | 2020-09-15 | 普元信息技术股份有限公司 | 微服务架构下实现网关动态路由控制的方法 |
CN111818182A (zh) * | 2020-08-31 | 2020-10-23 | 四川新网银行股份有限公司 | 一种基于Spring cloud gateway的微服务编排和数据聚合的方法 |
CN112260876A (zh) * | 2020-10-26 | 2021-01-22 | 欧冶云商股份有限公司 | 动态网关路由配置方法、平台、计算机设备及存储介质 |
CN112804722A (zh) * | 2020-12-31 | 2021-05-14 | 浪潮云信息技术股份公司 | 一种微服务网关动态路由的实现方法 |
CN113794636A (zh) * | 2021-08-11 | 2021-12-14 | 科大国创云网科技有限公司 | 一种基于Spring Cloud Gateway实现的动态路由编排方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102880557B (zh) | 一种异构数据源的多级分布式高速缓存的查找方法 | |
KR102486243B1 (ko) | 데이터 저장소를 파티셔닝하고 리밸런싱하는 기법 | |
US9749445B2 (en) | System and method for updating service information for across-domain messaging in a transactional middleware machine environment | |
JPH06161957A (ja) | ワークステーション | |
CN106155811B (zh) | 资源服务装置、资源调度方法和装置 | |
CN106161145A (zh) | 一种服务器系统运行状态信息的监控方法和系统 | |
CN112069265A (zh) | 配置数据的同步方法、业务数据系统、计算机系统和介质 | |
US9197546B2 (en) | System and method for providing a messaging cluster with hybrid partitions | |
CN108089912A (zh) | 一种虚拟机与容器超融合系统构建方法及装置 | |
US10102230B1 (en) | Rate-limiting secondary index creation for an online table | |
US10013449B1 (en) | Validating and non-validating secondary indexes for a table in a non-relational data store | |
CN105677251A (zh) | 基于Redis集群的存储系统 | |
US11663050B2 (en) | Method, device and computer program product for managing dedicated processing resources | |
US10235223B2 (en) | High-performance computing framework for cloud computing environments | |
CN112597249A (zh) | 一种业务数据的同步分发存储方法及系统 | |
US11706312B2 (en) | Distributed data stream programming and processing | |
CN114826869A (zh) | 设备管理方法和设备管理系统 | |
CN112764679B (zh) | 一种动态扩容的方法及终端 | |
CN113254274A (zh) | 消息处理方法、装置、存储介质以及服务器 | |
CN115567442A (zh) | 一种实现Spring Cloud动态路由的方法及装置 | |
CN109445966B (zh) | 事件处理方法、装置、介质和计算设备 | |
CN111381976A (zh) | 消息提示数据的更新方法、装置、存储介质及计算机设备 | |
CN111367932B (zh) | 数据库表单变更通知方法、装置、计算机设备及存储介质 | |
US10896077B2 (en) | Messaging abstraction layer for integration with message oriented middleware platforms | |
CN113704670A (zh) | 数据共享方法、装置、设备、介质和程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |