电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

基于Nacos實現Spring Cloud Gateway實現動態路由的方法

瀏覽:4日期:2023-09-03 10:56:27

簡介

該文檔主要介紹以Nacos為配置中心,實現Spring Cloud GateWay 實現動態路由的功能。Spring Cloud Gateway啟動時候,就將路由配置和規則加載到內存里,無法做到不重啟網關就可以動態的對應路由的配置和規則進行增加,修改和刪除。通過nacos的配置下發的功能可以實現在不重啟網關的情況下,實現動態路由。

集成

Spring Cloud GateWay集成

spring-cloud-starter-gateway:路由轉發、請求過濾(權限校驗、限流以及監控等)

spring-boot-starter-webflux:反應式Web框架

spring-boot-starter-actuator:監控系統健康

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

Nacos集成

nacos-client:nacos客戶端,現在用比較新的版本0.9.0

<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>0.9.0</version></dependency>

動態路由

DynamicRouteServiceImpl:提供動態路由的基礎方法,可通過獲取bean操作該類的方法。該類提供新增路由、更新路由、刪除路由,然后實現發布的功能。

@Servicepublic class DynamicRouteServiceImpl implements ApplicationEventPublisherAware { @Autowired private RouteDefinitionWriter routeDefinitionWriter; private ApplicationEventPublisher publisher; /** * 增加路由 * @param definition * @return */ public String add(RouteDefinition definition) { routeDefinitionWriter.save(Mono.just(definition)).subscribe(); this.publisher.publishEvent(new RefreshRoutesEvent(this)); return 'success'; } /** * 更新路由 * @param definition * @return */ public String update(RouteDefinition definition) { try { this.routeDefinitionWriter.delete(Mono.just(definition.getId())); } catch (Exception e) { return 'update fail,not find route routeId: '+definition.getId(); } try { routeDefinitionWriter.save(Mono.just(definition)).subscribe(); this.publisher.publishEvent(new RefreshRoutesEvent(this)); return 'success'; } catch (Exception e) { return 'update route fail'; } } /** * 刪除路由 * @param id * @return */ public String delete(String id) { try { this.routeDefinitionWriter.delete(Mono.just(id)); return 'delete success'; } catch (Exception e) { e.printStackTrace(); return 'delete fail'; } } @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { this.publisher = applicationEventPublisher; }}

RouteDefinition: 提供路由實體類,主要有predicates匹配來自用戶的請求,filters服務路由

@Validatedpublic class RouteDefinition {@NotEmptyprivate String id = UUID.randomUUID().toString();@NotEmpty@Validprivate List<PredicateDefinition> predicates = new ArrayList<>();@Validprivate List<FilterDefinition> filters = new ArrayList<>();@NotNullprivate URI uri;private int order = 0;public RouteDefinition() {}public RouteDefinition(String text) {int eqIdx = text.indexOf('=');if (eqIdx <= 0) {throw new ValidationException('Unable to parse RouteDefinition text ’' + text + '’' +', must be of the form name=value');}setId(text.substring(0, eqIdx));String[] args = tokenizeToStringArray(text.substring(eqIdx+1), ',');setUri(URI.create(args[0]));for (int i=1; i < args.length; i++) {this.predicates.add(new PredicateDefinition(args[i]));}}public String getId() {return id;}public void setId(String id) {this.id = id;}public List<PredicateDefinition> getPredicates() {return predicates;}public void setPredicates(List<PredicateDefinition> predicates) {this.predicates = predicates;}public List<FilterDefinition> getFilters() {return filters;}public void setFilters(List<FilterDefinition> filters) {this.filters = filters;}public URI getUri() {return uri;}public void setUri(URI uri) {this.uri = uri;}public int getOrder() {return order;}public void setOrder(int order) {this.order = order;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;RouteDefinition routeDefinition = (RouteDefinition) o;return Objects.equals(id, routeDefinition.id) &&Objects.equals(predicates, routeDefinition.predicates) &&Objects.equals(order, routeDefinition.order) &&Objects.equals(uri, routeDefinition.uri);}@Overridepublic int hashCode() {return Objects.hash(id, predicates, uri);}@Overridepublic String toString() {return 'RouteDefinition{' +'id=’' + id + ’’’ +', predicates=' + predicates +', filters=' + filters +', uri=' + uri +', order=' + order +’}’;}}

NacosGatewayProperties:自定義屬性綁定值,可通過配置文件配置屬性。

@ConfigurationProperties(prefix='nacos', ignoreUnknownFields = true)@Configurationpublic class NacosGatewayProperties {private String address;private String dataId;private String groupId;private Long timeout;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getDataId() {return dataId;}public void setDataId(String dataId) {this.dataId = dataId;}public String getGroupId() {return groupId;}public void setGroupId(String groupId) {this.groupId = groupId;}public Long getTimeout() {return timeout;}public void setTimeout(Long timeout) {this.timeout = timeout;}}

DynamicRouteServiceImplByNacos: 實現runner,通過nacos下發動態路由配置

@Componentpublic class DynamicRouteServiceImplByNacos implements CommandLineRunner{@Autowired private DynamicRouteServiceImpl dynamicRouteService;@Autowired private NacosGatewayProperties nacosGatewayProperties; /** * 監聽Nacos Server下發的動態路由配置 * @param dataId * @param group */ public void dynamicRouteByNacosListener (){ try { ConfigService configService=NacosFactory.createConfigService(nacosGatewayProperties.getAddress()); String content = configService.getConfig(nacosGatewayProperties.getDataId(), nacosGatewayProperties.getGroupId(), nacosGatewayProperties.getTimeout()); System.out.println(content); configService.addListener(nacosGatewayProperties.getDataId(), nacosGatewayProperties.getGroupId(), new Listener() {@Overridepublic void receiveConfigInfo(String configInfo) {List<RouteDefinition> list = JsonUtils.toList(configInfo, RouteDefinition.class);list.forEach(definition->{dynamicRouteService.update(definition);});}@Overridepublic Executor getExecutor() { return null;} }); } catch (NacosException e) { e.printStackTrace(); } }@Overridepublic void run(String... args) throws Exception { dynamicRouteByNacosListener();} }

nacos配置下發

nacos配置

nacos: address: 127.0.0.1:8848 data-id: dhap-gateway # group-id: AAA timeout: 5000

nacos屬性文件定義

新建dataID為groupID為AAA

基于Nacos實現Spring Cloud Gateway實現動態路由的方法

[{'filters': [],'id': 'blog1','order': 0,'predicates': [{'args': {'pattern': '/z'},'name': 'Path'}],'uri': 'https://blog.csdn.net/zhangchangbin123'}, {'filters': [],'id': 'blog1','order': 0,'predicates': [{'args': {'pattern': '/c'},'name': 'Path'}],'uri': 'https://blog.csdn.net/zhangchangbin123'}]

查看路由信息

基于Nacos實現Spring Cloud Gateway實現動態路由的方法

基于Nacos實現Spring Cloud Gateway實現動態路由的方法

基于Nacos實現Spring Cloud Gateway實現動態路由的方法

基于Nacos實現Spring Cloud Gateway實現動態路由的方法

到此這篇關于基于Nacos實現Spring Cloud Gateway實現動態路由的方法的文章就介紹到這了,更多相關Spring Cloud Gateway動態路由內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 截齿|煤截齿|采煤机截齿|掘进机截齿|旋挖截齿-山东卓力截齿厂家报价 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 层流手术室净化装修-检验科ICU改造施工-华锐净化工程-特殊科室建设厂家 | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 河南15年专业网站建设制作设计,做网站就找郑州启凡网络公司 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器| PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 中控室大屏幕-上海亿基自动化控制系统工程有限公司 | ZHZ8耐压测试仪-上海胜绪电气有限公司 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | CCE素质教育博览会 | CCE素博会 | 教育展 | 美育展 | 科教展 | 素质教育展 | 轴流风机-鼓风机-离心风机-散热风扇-罩极电机,生产厂家-首肯电子 | 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 北京公寓出租网-北京酒店式公寓出租平台 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 |