CN111669292B - 微服务架构下实现网关动态路由控制的方法 - Google Patents

微服务架构下实现网关动态路由控制的方法 Download PDF

Info

Publication number
CN111669292B
CN111669292B CN202010563627.3A CN202010563627A CN111669292B CN 111669292 B CN111669292 B CN 111669292B CN 202010563627 A CN202010563627 A CN 202010563627A CN 111669292 B CN111669292 B CN 111669292B
Authority
CN
China
Prior art keywords
gateway
redis
route
interface
routing
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.)
Active
Application number
CN202010563627.3A
Other languages
English (en)
Other versions
CN111669292A (zh
Inventor
王新
刘相
李航
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Primeton Information Technology Co ltd
Original Assignee
Primeton Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Primeton Information Technology Co ltd filed Critical Primeton Information Technology Co ltd
Priority to CN202010563627.3A priority Critical patent/CN111669292B/zh
Publication of CN111669292A publication Critical patent/CN111669292A/zh
Application granted granted Critical
Publication of CN111669292B publication Critical patent/CN111669292B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • H04L41/0813Configuration setting characterised by the conditions triggering a change of settings
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • H04L41/0813Configuration setting characterised by the conditions triggering a change of settings
    • H04L41/0816Configuration setting characterised by the conditions triggering a change of settings the condition being an adaptation, e.g. in response to network events
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/02Topology update or discovery
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明涉及一种微服务架构下实现网关动态路由控制的方法,包括采用Redis作为网关持久层;网关内定义内存缓存;关配置监听类,进行Redis和网关之间的事件通信,通过监听器监听Redis发出的通知,再根据变化的类型调用对应的方法,来实现路由配置数据的动态更新;网关对外提供治理数据的路由操作接口;网关自定义实现RouteDefinitionRepository接口,并重写父类方法。采用了本发明的微服务架构下实现网关动态路由控制的方法,实现了在不用重启网关也能实现动态路由,极大的提供了系统的稳定性和效率,极大的减少了由于系统频繁启停而带来的安全隐患问题,同时还降低了维护的成本,另外还提高了实用性,稳定性,便于企业在业务拓展中能快速对接新业务、新系统。

Description

微服务架构下实现网关动态路由控制的方法
技术领域
本发明涉及数据服务领域,尤其涉及微服务架构领域,具体是指一种微服务架构下实现网关动态路由控制的方法。
背景技术
随着互联网的高速发展,企业的IT环境和IT架构也在发生变革,从过去的单体应用架构发展为至今广泛流行的微服务架构。微服务是系统架构上的一种设计风格,它倡导将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程种运行,各个服务之间基于HTTP的RESTful API进行通信协作。在Java领域,2014年底spring团队推出的spring cloud已经成为Java领域落地微服务架构的完整解决方案,
而spring gateway作为spring cloud生态架构种的网关组件,旨在为微服务架构提供简单、有效且统一的API路由管理方式,其核心功能就是提供一种简单而有效的方式路由映射到指定的API,并为他们提供安全性、监控和限流等。
目前在现有的网关中,如果要实现动态路由,方式有两种,一种是在配置文件application.yaml中直接根据spring cloud gateway网关提供的规范去配置路由,另一种是通过Java代码的方式进行路由配置,具体步骤如下:
1、配置文件路由配置:
首先配置路由的id,然后配置好路由的uri以及predicate,这三个是必填项,否在路由不会生效,filters可填可不填,根据实际需求进行设置。配置完成之后重启网关程序,网关在重启时通过spring boot的@ConfigurationPropeties机制,使用PropertiesRouteDefinitionLocator从配置文件中加载路由的配置信息,然后加载进内存中即生效。
2、Java代码方式进行路由配置:
Java代码的方式配置步骤:首先根据spring5的规范用代码的方式自定义RouteLocator bean,然后再自定义路由的配置。然后重启网关,网关再启动时通过springboot的@SpringbootApplication注解扫描到@Bean注解,然后把路由配置加载进内存中生效。
现有的spring cloud网关不管是通过配置文件配置的方式去添加路由,还是通过Java代码的方式去配置添加路由,都必须要重启网关程序,让网关在重启时去重新扫描并加载新增的路由配置到内存中去,然后再生效,并不能够做到路由动态加载,即无需重启网关即可做到路由的动态加载生效。在当前各企业程序都微服务化的大环境下,路由的更换和新增是普遍存在的,但这两种方式显然存在着致命的缺陷,网关的经常性启停会严重影响到服务的正常通信,会给企业带来极大的不便。
发明内容
本发明的目的是克服了上述现有技术的缺点,提供了一种满足实用性高、稳定性好、适用范围较为广泛的微服务架构下实现网关动态路由控制的方法。
为了实现上述目的,本发明的微服务架构下实现网关动态路由控制的方法如下:
该微服务架构下实现网关动态路由控制的方法,其主要特点是,所述的方法包括以下步骤:
(1)采用Redis作为网关持久层;
(2)网关内定义内存缓存;
(3)网关配置监听类,进行Redis和网关之间的事件通信,通过监听器监听Redis发出的通知,再根据变化的类型调用对应的方法,来实现路由配置数据的动态更新;
(4)网关对外提供治理数据的路由操作接口;
(5)网关自定义实现RouteDefinitionRepository接口,并重写父类方法。
较佳地,所述的步骤(1)具体包括以下步骤:
(1.1)开启Redis键空间通知;
(1.2)网关配置Redis信息;
(1.3)网关实现Redis统一存储接口操作。
较佳地,所述的步骤(1.1)具体为:
修改Redis配置文件,添加参数,并给这个参数配置值Kg。
较佳地,所述的步骤(1.2)具体为:
打开网关应用的目录,查询网关配置文件并添加Redis的配置信息,分别针对单机模式和集群模式做不同的配置。
较佳地,所述的步骤(2)具体为:
在网关内部定义了内存路由缓存类,定义了load()方法和clear()方法,并实现InitializingBean接口和ApplicationEventPublisherAware接口,所述的load()方法用于加载路由数据,clear()方法用于清除路由数据;所述的InitializingBean接口用于使路由缓存类RouteCache在bean初始化之后就自动去Redis加载路由数据,所述的ApplicationEventPublisherAware接口用于让路由缓存类拥有spring事件发布机制,在路由更新的时候去发布事件通知网关去更新路由定义,使路由动态加载。
较佳地,所述的步骤(3)具体包括以下步骤:
(3.1)自定义Redis消息事件监听器,分别调用路由缓存类中的set方法和del方法,进行路由数据的更新和删除;
(3.2)自定义spring事件监听器,配置要监听的Redis的key以及注册需实现的RedisMessageListener监听器。
较佳地,所述的步骤(4)的路由操作接口包括新增路由接口、修改路由接口、按条件删除路由接口和按条件查询路由接口,所述的新增接口将路由数据保存进Redis,所述的修改接口对Redis中的路由数据进行修改,所述的删除接口对Redis中的路由数据进行删除,所述的获取接口从Redis中获取路由数据。
较佳地,所述的步骤(5)具体包括以下步骤:
(5.1)自定义路由定义类LocalRouteDefinitionRepository,并实现RouteDefinitionRepository接口,且定义LinkedHashMap,用来保存路由配置信息;
(5.2)重写父类的三个方法save()、delete()和getRouteDefinitions();
(5.3)定义clear()方法,清除LinkedHashMap中的数据;
(5.4)在save()方法内将路由数据保存进LinkedHashMap中;
(5.5)在delete()方法内将路由数据从LinkedHashMap删除;
(5.6)RouteCache自动去网关的持久存储中加载所有路由,然后调用save()方法保存路由数据。
采用了本发明的微服务架构下实现网关动态路由控制的方法,通过对外提供治理数据的接口,对内提供统一存储接口;通过统一存储接口,将路由配置数据保存进持久层Redis;Redis将路由数据的变更通知各网关实例;网关将数据从Redis中同步至内存高速缓存;通过自定义实现RouteDefinitionRepository接口并重写父类方法来实现动态从内存缓存中加载配置好的路由,从而实现了在不用重启网关也能实现动态路由,极大的提供了系统的稳定性和效率,极大的减少了由于系统频繁启停而带来的安全隐患问题,同时还降低了维护的成本,另外还提高了实用性,稳定性,便于企业在业务拓展中能快速对接新业务、新系统。
附图说明
图1为本发明的微服务架构下实现网关动态路由控制的方法的逻辑架构图。
具体实施方式
为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
本发明的该微服务架构下实现网关动态路由控制的方法,其中包括以下步骤:
(1)采用Redis作为网关持久层;
(1.1)开启Redis键空间通知;
修改Redis配置文件,添加参数,并给这个参数配置值Kg;
(1.2)网关配置Redis信息;
打开网关应用的目录,查询网关配置文件并添加Redis的配置信息,分别针对单机模式和集群模式做不同的配置;
(1.3)网关实现Redis统一存储接口操作;
(2)网关内定义内存缓存;
(3)网关配置监听类,进行Redis和网关之间的事件通信,通过监听器监听Redis发出的通知,再根据变化的类型调用对应的方法,来实现路由配置数据的动态更新;
(3.1)自定义Redis消息事件监听器,分别调用路由缓存类中的set方法和del方法,进行路由数据的更新和删除;
(3.2)自定义spring事件监听器,配置要监听的Redis的key以及注册需实现的RedisMessageListener监听器;
(4)网关对外提供治理数据的路由操作接口;
(5)网关自定义实现RouteDefinitionRepository接口,并重写父类方法;
(5.1)自定义路由定义类LocalRouteDefinitionRepository,并实现RouteDefinitionRepository接口,且定义LinkedHashMap,用来保存路由配置信息;
(5.2)重写父类的三个方法save()、delete()和getRouteDefinitions();
(5.3)定义clear()方法,清除LinkedHashMap中的数据;
(5.4)在save()方法内将路由数据保存进LinkedHashMap中;
(5.5)在delete()方法内将路由数据从LinkedHashMap删除;
(5.6)RouteCache自动去网关的持久存储中加载所有路由,然后调用save()方法保存路由数据。
作为本发明的优选实施方式,所述的步骤(2)具体为:
在网关内部定义了内存路由缓存类,定义了load()方法和clear()方法,并实现InitializingBean接口和ApplicationEventPublisherAware接口,所述的load()方法用于加载路由数据,clear()方法用于清除路由数据;所述的InitializingBean接口用于使路由缓存类RouteCache在bean初始化之后就自动去Redis加载路由数据,所述的ApplicationEventPublisherAware接口用于让路由缓存类拥有spring事件发布机制,在路由更新的时候去发布事件通知网关去更新路由定义,使路由动态加载。
作为本发明的优选实施方式,所述的步骤(4)的路由操作接口包括新增路由接口、修改路由接口、按条件删除路由接口和按条件查询路由接口,所述的新增接口将路由数据保存进Redis,所述的修改接口对Redis中的路由数据进行修改,所述的删除接口对Redis中的路由数据进行删除,所述的获取接口从Redis中获取路由数据。
本发明的具体实施方式中,本发明涉及一种微服务架构下实现网关动态路由控制的方法。其中包括对外提供治理数据的接口,对内提供统一存储接口;通过统一存储接口,将路由配置数据保存进持久层(Redis);Redis将路由数据的变更通知各网关实例;网关将数据从Redis中同步至内存高速缓存;通过自定义实现RouteDefinitionRepository接口并重写父类方法来实现动态从内存缓存中加载配置好的路由。采用该基于微服务架构下实现网关动态路由控制的方法,用户可以自定义随时添加和删除修改路由,并不需要重启网关,极大的提高了系统的稳定性和效率,减少了系统频繁启停所带来的不安全隐患,降低了维护的成本;同时运用本发明的方法便于企业在拓展业务中使网关能快速对接新系统,从而提高了实用性,稳定性,具有更广泛的应用范围。
本发明针对上述目前网关加载路由的方式的不足之处,即在微服务架构下,网关通过配置文件的方式去配置路由和通过Java代码的方式去配置路由,都必须要重启网关才能生效,无法做到动态路由的问题。通过自定义实现RouteDefinitionRepository接口并重写父类方法来动态从内存缓存中加载外部请求过来的路由数据,从而无需重启网关即可实现动态加载路由。
为了实现上述目的,本发明基于微服务架构下实现网关动态路由控制的方法技术解决方案如图1所示,本发明是基于java语言以及java语言中的spring cloud gateway框架实现的,因此文中出现的英文单词都是Java术语或者java代码。
方案要点如下:
1、由三方数据治理平台推送路由配置数据给网关。
2、网关通过对外数据治理接口接收到路由配置数据并通过治理数据统一存储接口保存进网关数据持久层-Redis中。
3、Redis在已经配置好了键空间通知的前提下,reids中路由数据有变化就会发送通知。
4、网关配置好Redis监听器,监听Redis发出的通知事件,来获取Redis中变化的路由数据并把数据更新进网关内存缓存中。
5、通过自定义实现spring cloud gateway提供的RouteDefinitionRepository并重写父类的方法来更新路由定义,然后发送spring系统通知事件,通知网关去更新路由定义,最终完成路由动态加载。
下面详细描述方案中的每个步骤的具体实现和原理。
一、采用Redis作为网关持久层
采用Redis作为数据存储持久层,通过运用Redis的键空间通知机制可以很好的和网关进行数据交互,
步骤说明:
1、开启Redis键空间通知
修改Redis配置文件Redis.conf,添加参数:notify-keyspace-events,并给这个参数配置值“Kg”,参数:notify-keyspace-events为空时,标识键空间通知功能关闭,不为空时,功能开启。参数值“Kg”所代表的意思如下:
Figure GDA0004143969470000061
按照上述步骤修改完Redis.conf配置后,当Redis中的key发生新增、修改和删除以及过期时,都会对外发出键空间通知事件,因此需要在网关去监听这个事件。
2、网关配置Redis信息
打开网关应用的application.properties或者application.yaml配置文件,添加Redis的配置信息,分别针对单机模式和集群模式做不同的配置。
Redis单机模式网关配置信息:
Figure GDA0004143969470000062
Redis集群模式网关配置信息:
Figure GDA0004143969470000071
3、网关实现Redis统一存储接口
通过spring提供的StringRedisTemplate封装好操作Redis增、删、改、查的工具类RedisRouteRepository,这样所有的路由操作统一由RedisRouteRepository去完成。
二、网关内定义内存缓存
在网关内部定义了内存路由缓存类RouteCache,并定义了两个方法:load()方法和clear()方法,load()方法的作用是用来加载路由数据,clear()方法的作用是清除路由数据。
并实现InitializingBean接口和ApplicationEventPublisherAware接口。
实现InitializingBean接口的目的是重写父类方法afterPropertiesSet(),在该方法内区调用load()方法,让路由缓存类RouteCache拥有在bean初始化之后就可以自动去Redis加载路由数据的功能,从而实现网关重启而路由配置不会丢失;
实现ApplicationEventPublisherAware接口的目的是让路由缓存类拥有spring事件发布机制,在路由更新的时候去发布事件通知网关去更新路由定义,最终达到路由动态加载的目的。
三、网关配置监听类
这里分为两个步骤:
1、自定义Redis消息事件监听器并实现spring-data-Redis提供的MessageListener接口,并重写onMessage()方法,并在该方法内判断message类型是“set“还是”del“,然后分别调用路由缓存类中的set和del方法,从而实现路由数据的更新和删除。
2、自定义spring事件监听器并实现ApplicationListener和BeanFactoryAware,并重写onApplicationEvent()方法,在该方法内去配置要监听的Redis的key以及注册第一步实现的RedisMessageListener监听器。
通过这两步配置,即可实现Redis和网关之间的事件通信,一旦我们在第二部监听的key有变化,网关通过监听器就能监听到Redis发出的通知,然后再根据变化的类型去调用RouteCache中对应的方法,以实现路由配置数据的动态更新。
四、网关对外提供治理数据的restful接口
在网关应用中按照rest风格设计一套对外的路由操作接口,具体包括新增路由接口、修改路由接口、按条件删除路由接口以及按条件查询路由接口这四个接口,这些接口就作为外部推送路由配置数据的入口。当第三方数据治理平台将数据推送过来时,通过步骤一中的第三小节,把数据全部存储进Redis,然后再通过步骤二和三在将数据同步进网关缓存中以供步骤五使用。
五、网关实现RouteDefinitionRepository接口并重写父类方法
RouteDefinitionRepository是springcloudgateway官方提供的一个接口,里面定义了三个方法:save()、delete()、getRouteDefinitions(),分别是保存路由定义方法、删除路由定义方法以及加载所有路由定义方法。
官方有一个RouteDefinitionRepository接口的默认实现:InMemoryRouteDefinitionRepository,它会将所有的路由定义数据都保存在内部的一个LikedMap中,但是有一个致命的问题就是LikedMap是在内存中,一旦网关重启,之前的路由数据就会丢失,因此本发明就为了解决这一问题,实现路由动态加载,就自定义一个路由定义类LocalRouteDefinitionRepository并实现RouteDefinitionRepository接口,然后在内部定义一个LinkedHashMap,用来保存路由配置信息,然后重写父类的三个方法,
并结合步骤一、二、三和四,网关通过步骤四接收到外部路由配置数据,通过步骤二把路由配置数据保存进Redis,然后通过步骤一、二和三把Redis中的数据同步到网关内,如果是新增,那么就调用LocalRouteDefinitionRepository中的save()方法,在save()内又把数据保存进内部定义的LinkedHashMap;如果是删除,那么就调用LocalRouteDefinitionRepository中的delete()方法,在delete()方法内把数据从LinkedHashMap中删除。最后为了能使网关在重启后恢复原先的路由配置,结合步骤二和步骤三,在网关重启时,RouteCache会去Redis中加载全部的路由配置数据,然后调用LocalRouteDefinitionRepository中的save()方法把路由配置全部保存进LinkedHashMap。这就是网关动态路由的实现全部细节。
本发明是基于Java语言的spring cloud gateway框架实现的,因此文中出现的英文单词都是Java术语以及代码,微服务框架下实现网关动态路由的方法的具体实施步骤如下:
1、采用Redis作为网关持久层
此步骤在实施过程中的具体步骤如下:
1)开启Redis键空间通知:先通过命令“Redis-cli shutdown”停止Redis服务,修改Redis配置文件Redis.conf,添加参数:notify-keyspace-events,并给这个参数配置值“Kg”,“Kg”所代表的含义可参考发明内容中的技术解决方案中的步骤一中的第一小点。修改完之后通过命令“Redis-server”启动Redis服务。
2)网关配置Redis信息:打开网关应用的src目录下的resource目录,找到网关配置文件applicarion.properties或者application.ymal,并添加Redis的配置信息
Redis单机模式网关配置信息:
Figure GDA0004143969470000091
Redis集群模式网关配置信息:
Figure GDA0004143969470000092
3)网关定义一套Redis的key匹配类RedisKeyGenerator,并定义好路由在Redis中key的格式,以便区分不同网关共用一套Redis情况下的路由数据,路由key的格式为:“gtw[gateway.code].route.id[routeId].route”
4)网关实现Redis统一存储接口:通过spring提供的StringRedisTemplate封装好操作Redis增、删、改、查的工具类RedisRouteRepository,实现RedisRouteRepository的伪代码如下:
Figure GDA0004143969470000093
Figure GDA0004143969470000101
2、网关内定义内存缓存
此步骤在实施过程中的具体步骤如下:
1)自定义路由内存缓存类RouteCache,并定义方法Load()和clear(),load()方法主要是通过RedisRouteRepository工具类去Redis加载路由数据进内存;而clear()方法是清空RouteCache的内存缓存数据
2)RouteCache实现接口InitializingBean,并重写方法afterPropertiesSet(),在该方法内调用load()方法,从而实现在类加载之后再去加载路由数据
3)RouteCache实现接口ApplicationEventPublisherAware,目的是让路由缓存类拥有spring事件发布机制,在路由更新的时候去发布事件通知网关去更新路由定义
实现RouteCache的伪代码如下:
Figure GDA0004143969470000102
Figure GDA0004143969470000111
/>
Figure GDA0004143969470000121
/>
Figure GDA0004143969470000131
/>
Figure GDA0004143969470000141
3、网关配置监听类
此步骤在实施过程中的具体步骤如下:
1)自定义Redis消息监听器RedisMessageListener并实现spring-data-Redis提供的MessageListener接口,并重写onMessage()方法,并在该方法内判断message类型是“set“还是”del“,然后分别调用路由缓存类中的set和del方法
该步骤的伪代码如下:
Figure GDA0004143969470000142
/>
Figure GDA0004143969470000151
/>
Figure GDA0004143969470000161
2)自定义spring事件监听器并实现ApplicationListener和BeanFactoryAware,并重写onApplicationEvent()方法,在该方法内去配置要监听的Redis的key以及注册第一步实现的RedisMessageListener监听器。
该步骤的伪代码如下:
Figure GDA0004143969470000162
/>
Figure GDA0004143969470000171
3).将上述1,2两步的配置类都注册进spring,交由spring管理,此步骤的伪代码如下:
Figure GDA0004143969470000181
3)将上述1,2两步的配置类都注册进spring,交由spring管理,此步骤的伪代码如下:
4、网关对外提供治理数据的restful接口
此步骤在实施过程中的具体步骤如下:
1)按照restful风格定义一套对外的路由接口,具体包含路由新增、路由修改、路由删除和路由查询这四类接口
2)在新增接口中,通过步骤1.4的RedisRouteRepository工具类直接把路由数据保存进Redis
3)在修改接口中,通过步骤1.4的RedisRouteRepository工具类对Redis中的路由数据进行修改
4)在删除接口中,通过步骤1.4的RedisRouteRepository工具类直接对Redis中的路由数据进行删除
5)在获取接口中,通过步骤1.4的RedisRouteRepository工具类直接从Redis中获取路由数据
此步骤的伪代码实现如下:
Figure GDA0004143969470000191
5、网关实现RouteDefinitionRepository接口并重写父类方法
此步骤在实施过程中的具体步骤如下:
1)自定义一个路由定义类LocalRouteDefinitionRepository,并实现RouteDefinitionRepository接口
2)在LocalRouteDefinitionRepository类中定义一个LinkedHashMap,用来保存路由配置信息
3)重写父类的三个方法:save()、delete()、getRouteDefinitions()
4)在LocalRouteDefinitionRepository类中定义clear()方法,用来清除LinkedHashMap中的数据
5)在save()方法内实现将路由数据保存进LinkedHashMap中
6)在delete()方法内实现将路由数据从LinkedHashMap删除
7)RouteCache在网关启动时,会自动去网关的持久存储中加载所有路由,然后调用save()方法将路由数据保存进Map中
8)LocalRouteDefinitionRepository在执行clear之后,下次如果有请求过来,会调用getRouteDefinitions方法.此时,需要判断当前的map中是否有路由定义.如果没有,需要通过RouteCache,重新加载一次所有当前网关路由。
9)对路由做了save,delete或者clear或者load之后,为了使改动生效,需要发送一个系统事件,通知网关去更新路由定义.代码如下(代码在RouteCache中)
此步骤的伪代码实现如下:
Figure GDA0004143969470000201
/>
Figure GDA0004143969470000211
采用了本发明的微服务架构下实现网关动态路由控制的方法,通过对外提供治理数据的接口,对内提供统一存储接口;通过统一存储接口,将路由配置数据保存进持久层Redis;Redis将路由数据的变更通知各网关实例;网关将数据从Redis中同步至内存高速缓存;通过自定义实现RouteDefinitionRepository接口并重写父类方法来实现动态从内存缓存中加载配置好的路由,从而实现了在不用重启网关也能实现动态路由,极大的提供了系统的稳定性和效率,极大的减少了由于系统频繁启停而带来的安全隐患问题,同时还降低了维护的成本,另外还提高了实用性,稳定性,便于企业在业务拓展中能快速对接新业务、新系统。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。

Claims (5)

1.一种微服务架构下实现网关动态路由控制的方法,其特征在于,所述的方法包括以下步骤:
(1)采用Redis作为网关持久层;
(2)网关内定义内存路由缓存类RouteCache;
(3)网关配置监听类,进行Redis和网关之间的事件通信,通过监听器监听Redis发出的通知,再根据变化的类型调用对应的方法,来实现路由配置数据的动态更新;
(4)网关对外提供治理数据的路由操作接口,网关接收到外部路由配置数据,把路由配置数据保存进Redis;
(5)网关自定义实现RouteDefinitionRepository接口,并重写父类方法,实现动态从内存路由缓存类RouteCache中加载配置好的路由;
所述的方法是基于Java语言的spring cloud gateway框架实现的;
所述的步骤(1)具体包括以下步骤:
(1.1)开启Redis键空间通知;
(1.2)网关配置Redis信息;
(1.3)网关实现Redis统一存储接口操作;
所述的步骤(2)具体为:
在网关内部定义了内存路由缓存类,定义了load()方法和clear()方法,并实现InitializingBean接口和ApplicationEventPublisherAware接口,所述的load()方法用于加载路由数据,clear()方法用于清除路由数据;所述的InitializingBean接口用于使路由缓存类RouteCache在bean初始化之后就自动去Redis加载路由数据,所述的ApplicationEventPublisherAware接口用于让路由缓存类拥有spring事件发布机制,在路由更新的时候去发布事件通知网关去更新路由定义,使路由动态加载;
所述的步骤(5)具体包括以下步骤:
(5.1)自定义路由定义类LocalRouteDefinitionRepository,并实现RouteDefinitionRepository接口,且定义LinkedHashMap,用来保存路由配置信息;
(5.2)重写父类的三个方法save()、delete()和getRouteDefinitions(),分别是保存路由定义方法、删除路由定义方法以及加载所有路由定义方法;
(5.3)在save()方法内将路由数据保存进LinkedHashMap中;
(5.4)在delete()方法内将路由数据从LinkedHashMap删除;
(5.5)在网关重启时,RouteCache自动去网关的持久存储Redis中加载所有路由,然后调用save()方法保存路由数据。
2.根据权利要求1所述的微服务架构下实现网关动态路由控制的方法,其特征在于,所述的步骤(1.1)具体为:
修改Redis配置文件,添加参数,并给这个参数配置值Kg。
3.根据权利要求1所述的微服务架构下实现网关动态路由控制的方法,其特征在于,所述的步骤(1.2)具体为:
打开网关应用的目录,查询网关配置文件并添加Redis的配置信息,分别针对单机模式和集群模式做不同的配置。
4.根据权利要求1所述的微服务架构下实现网关动态路由控制的方法,其特征在于,所述的步骤(3)具体包括以下步骤:
(3.1)自定义Redis消息事件监听器,分别调用路由缓存类中的set方法和del方法,进行路由数据的更新和删除;
(3.2)自定义spring事件监听器,配置要监听的Redis的key以及注册需实现的RedisMessageListener监听器。
5.根据权利要求1所述的微服务架构下实现网关动态路由控制的方法,其特征在于,所述的步骤(4)的路由操作接口包括新增路由接口、修改路由接口、按条件删除路由接口和按条件查询路由接口,所述的新增接口将路由数据保存进Redis,所述的修改接口对Redis中的路由数据进行修改,所述的删除接口对Redis中的路由数据进行删除,所述的获取接口从Redis中获取路由数据。
CN202010563627.3A 2020-06-19 2020-06-19 微服务架构下实现网关动态路由控制的方法 Active CN111669292B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010563627.3A CN111669292B (zh) 2020-06-19 2020-06-19 微服务架构下实现网关动态路由控制的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010563627.3A CN111669292B (zh) 2020-06-19 2020-06-19 微服务架构下实现网关动态路由控制的方法

Publications (2)

Publication Number Publication Date
CN111669292A CN111669292A (zh) 2020-09-15
CN111669292B true CN111669292B (zh) 2023-06-20

Family

ID=72388918

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010563627.3A Active CN111669292B (zh) 2020-06-19 2020-06-19 微服务架构下实现网关动态路由控制的方法

Country Status (1)

Country Link
CN (1) CN111669292B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112241316A (zh) * 2020-09-18 2021-01-19 武汉迎风聚智科技有限公司 一种分布式调度应用的方法以及装置
CN115150316A (zh) * 2021-03-15 2022-10-04 上海博泰悦臻网络技术服务有限公司 基于动态路由的网关控制方法、装置、介质及网关设备
CN113765695A (zh) * 2021-03-26 2021-12-07 北京京东拓先科技有限公司 一种网关管理方法、装置、设备及计算机可读存储介质
CN113347041B (zh) * 2021-06-21 2022-03-01 深圳壹账通智能科技有限公司 动态限流熔断配置方法、装置、设备及存储介质
CN113595925B (zh) * 2021-07-06 2024-01-30 中企云链(北京)金融信息服务有限公司 一种智能网关动态限流实现方法
CN113765701B (zh) * 2021-08-02 2024-02-20 中企云链(北京)金融信息服务有限公司 一种基于永久内存缓存的网关控制方法
CN113726662B (zh) * 2021-08-19 2023-02-10 成都民航西南凯亚有限责任公司 一种微服务路由及管理系统
CN115567442A (zh) * 2022-09-06 2023-01-03 山东浪潮智慧医疗科技有限公司 一种实现Spring Cloud动态路由的方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10148503B1 (en) * 2015-12-29 2018-12-04 EMC IP Holding Company LLC Mechanism for dynamic delivery of network configuration states to protocol heads
CN109617807A (zh) * 2018-12-28 2019-04-12 深圳云天励飞技术有限公司 路由信息更新方法、装置、网关及存储介质
CN109639572A (zh) * 2018-12-06 2019-04-16 网易(杭州)网络有限公司 路由管理方法、装置及微服务系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190250859A1 (en) * 2018-02-09 2019-08-15 Plex Systems, Inc. Embedded architecture using inter-processor communication and in memory database for rapid creation of industrial protocol converters

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10148503B1 (en) * 2015-12-29 2018-12-04 EMC IP Holding Company LLC Mechanism for dynamic delivery of network configuration states to protocol heads
CN109639572A (zh) * 2018-12-06 2019-04-16 网易(杭州)网络有限公司 路由管理方法、装置及微服务系统
CN109617807A (zh) * 2018-12-28 2019-04-12 深圳云天励飞技术有限公司 路由信息更新方法、装置、网关及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于微服务的软件体系结构设计方法研究与应用;蔡亚楠;《硕士电子期刊》;20190815(第8期);第3.2.4节、第3.5.4节、第3.5.5节、第5.1节、第5.3节 *

Also Published As

Publication number Publication date
CN111669292A (zh) 2020-09-15

Similar Documents

Publication Publication Date Title
CN111669292B (zh) 微服务架构下实现网关动态路由控制的方法
CN107515776B (zh) 业务不间断升级方法、待升级节点和可读存储介质
US9253265B2 (en) Hot pluggable extensions for access management system
CN106951233B (zh) 混合模式智能手机应用开发框架系统
KR100210208B1 (ko) 객체 지향 환경에서 지속성의 속성들을 인에이블링하는 방법 및 장치
US9880982B2 (en) System and method for rendering presentation pages based on locality
US9798555B2 (en) Application implementation method and apparatus
EP2076057B1 (en) Method and apparatuses for information locking
US20030070162A1 (en) Information processor having multi OS and its OS update method
US20100088270A1 (en) Data versioning concept including time dependency and active and inactive states
KR20110128846A (ko) 장치와 웹 서비스 간에 브라우저 캐시를 동기화하는 프로그래밍 모델
US8650288B2 (en) Runtime usage analysis for a distributed policy enforcement system
CN112328296B (zh) 针对跨平台应用的软件更新方法、装置、设备和介质
CN106886422A (zh) 软件升级方法及装置、电子设备
CN112363845A (zh) 系统集成中台的数据同步方法及集成中台系统
CN111240892A (zh) 数据备份方法及装置
CN112685020A (zh) 动态创建服务接口的方法、装置、电子设备及存储介质
CN108173665B (zh) 一种备份数据的方法及装置
US8631425B2 (en) Method for processing of application transaction in a web services framework
JP2007065837A (ja) 状態制御方法、状態制御プログラムおよび状態制御プログラムを記録した記録媒体
CN112667711B (zh) 一种MySQL只读实例管理方法、系统及计算机可读介质
JP2014504469A (ja) ネットワーク要素の構成管理
CN112130953A (zh) Windows Hyper-V虚拟化的应用部署方法
CN108228266A (zh) 一种Android插件框架下不同插件间启动Fragment组件的方法和装置
US6876995B1 (en) Web store events

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
GR01 Patent grant
GR01 Patent grant