日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:25日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区清纯| 欧美在线亚洲| 国产亚洲精品美女久久| 热久久国产精品| 免费精品视频在线| 亚洲精选91| 国产一级成人av| 国产免费播放一区二区| 久久99蜜桃| www.com.cn成人| 欧美日韩国产高清| 免费成人性网站| 欧美一区二区三区久久| 精品国产一区二| 久久精品123| 天堂av在线一区| 视频一区二区三区在线| 欧美综合社区国产| 精品72久久久久中文字幕| а√天堂8资源中文在线| 国产 日韩 欧美一区| 不卡中文一二三区| 免费在线观看日韩欧美| 国产探花在线精品| 国产一区二区三区不卡av| 久久久亚洲一区| 亚洲日产av中文字幕| 国产剧情一区| 日韩另类视频| 最近国产精品视频| 国产精品久久久久久久久久妞妞| 岛国av在线网站| 国产精品日本| 美腿丝袜亚洲一区| 欧美aa国产视频| 日韩一区二区三区高清在线观看| 欧美激情 亚洲a∨综合| 久久国产欧美| 亚洲精品伊人| 黄色精品视频| 亚洲尤物在线| 精品视频一区二区三区四区五区| 久久精品高清| 69堂精品视频在线播放| 国产精品xxx| 久久免费大视频| 欧美专区一区| 成人精品亚洲| 日韩激情中文字幕| 久久久9色精品国产一区二区三区| 亚洲三区欧美一区国产二区| 成人精品视频| 99国产精品久久久久久久成人热| 国产日产高清欧美一区二区三区| av日韩中文| 日韩一区二区三区免费视频| 欧美一区久久久| 亚洲精品看片| 日韩一区电影| 国产精品地址| 视频一区免费在线观看| 日韩久久精品| 久久精品99久久久| 久久国产中文字幕| 欧美成人精品午夜一区二区| 久久亚洲影院| 日韩精品一区二区三区免费观影 | 日韩精品一卡二卡三卡四卡无卡| 卡一卡二国产精品| 免费成人在线影院| 中文字幕系列一区| 欧美91在线| 日本不卡一区二区三区| 久久国产成人午夜av影院宅| 国产精品99久久久久久董美香| 久久成人亚洲| 黑森林国产精品av| 亚洲精品中文字幕99999| 91精品久久久久久久久久不卡| 国产福利一区二区三区在线播放| 在线国产精品一区| 国产综合视频| 日韩欧美一区二区三区免费看| 久久99蜜桃| 视频一区日韩精品| 一区二区自拍| 久久国产亚洲| 欧美aa一级| 精品国产亚洲日本| 国产欧美久久一区二区三区| 亚洲精品日韩久久| 红桃视频欧美| 国产一区二区三区日韩精品| 青青伊人久久| 亚洲精品一级二级三级| 男女男精品视频网| 日韩中文字幕区一区有砖一区 | 一区二区精品伦理...| 国产伦精品一区二区三区视频| 免费一级片91| 久久五月天小说| 国产白浆在线免费观看| 国产高清日韩| 欧美激情久久久久久久久久久| 天堂va欧美ⅴa亚洲va一国产| 亚洲一区二区毛片| 午夜国产精品视频| 久久视频精品| 五月天久久777| 欧美天堂亚洲电影院在线观看| 欧美日韩精品在线一区| 欧美精品资源| 久久激情婷婷| 亚洲二区精品| 亚洲电影在线| 91精品推荐| 亚洲一级影院| 亚洲精品a级片| 一区在线免费观看| 亚洲欧美日本视频在线观看| 亚洲一区中文| 亚洲综合中文| 日韩久久一区| 69精品国产久热在线观看| 国产图片一区| 精品国内亚洲2022精品成人| 精品欧美视频| 日韩免费高清| 激情欧美一区| 亚洲激情婷婷| 日韩制服丝袜av| 亚洲精品影院在线观看| 91嫩草精品| 久草精品视频| av在线日韩| 好吊视频一区二区三区四区| 一区二区不卡| 国产欧美88| 国产在线看片免费视频在线观看| 欧洲亚洲一区二区三区| 亚洲免费在线| 91精品尤物| 韩国女主播一区二区三区| 神马午夜在线视频| 亚洲成人三区| 日本亚州欧洲精品不卡| 欧美一区二区三区久久精品| 狠狠久久伊人| 自拍日韩欧美| 97精品久久| 国产va在线视频| 亚洲深夜影院| 国产日产精品一区二区三区四区的观看方式 | 久久美女精品| 蜜臀国产一区二区三区在线播放| 日韩有码av| 91欧美日韩在线| 激情综合五月| 日韩视频在线一区二区三区 | 欧美精品一区二区久久| 亚洲理论在线| 久久免费精品| 亚洲五月婷婷| 日韩国产91| 都市激情国产精品| 丝袜a∨在线一区二区三区不卡| 国产午夜精品一区在线观看| 成人自拍av| 一级成人国产| 国产资源在线观看入口av| 亚洲综合精品四区| 视频一区视频二区在线观看| 久久99精品久久久久久园产越南| 久久在线免费| 国产亚洲欧美日韩在线观看一区二区 | 久久久影院免费| 日本中文字幕不卡| 黄毛片在线观看| 久久亚洲影院| 欧美国产一级| 亚洲另类av| 偷拍精品精品一区二区三区| 综合激情五月婷婷| 国产美女高潮在线观看| 亚洲欧美网站在线观看| 精品中国亚洲| 香蕉久久夜色精品国产| 精品资源在线| 综合日韩在线| 久久一区二区三区电影| 国产精品美女久久久久久不卡| 亚洲国产成人精品女人| 开心激情综合| 丝袜亚洲精品中文字幕一区| 国产精品麻豆久久| 四虎精品永久免费| 999久久久精品国产| 国产乱码精品一区二区三区四区| 黄色成人在线网址| 麻豆成全视频免费观看在线看|