范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringGateway集成Nacos实现动态路由配置

  通过Spring Gateway 集成Nacos实现配置管理,并且实现动态路由管理。
  一、创建test-gateway项目,POM文件如下:	4.0.0 	 		com.golte.parent 		golte-parent 		1.0.0 	 	com.golte.gateway 	golte-gateway 	0.0.1-SNAPSHOT 	golte-gateway 	Gateway project for Spring Boot  	 		1.8 		Hoxton.SR8     2.2.3.RELEASE     1.2.73 	  	 		 			org.springframework.cloud 			spring-cloud-starter-gateway 		 		 			com.alibaba.cloud 			spring-cloud-starter-alibaba-nacos-config 		 		 			com.alibaba.cloud 			spring-cloud-starter-alibaba-nacos-discovery 		 		 		 			com.alibaba.cloud 			spring-cloud-alibaba-sentinel-gateway 		 		 		 			org.springframework.boot 			spring-boot-starter-actuator 		 		 			org.springframework.boot 			spring-boot-starter-test 			test 			 				 					org.junit.vintage 					junit-vintage-engine 				 			 		 		 			com.alibaba 			fastjson 			${fastjson.version} 		 	  	 		 			 				org.springframework.cloud 				spring-cloud-dependencies 				${spring.cloud.version} 				pom 				import 			 			 				com.alibaba.cloud 				spring-cloud-alibaba-dependencies 				${alibaba.cloud.version} 				pom 				import 			 		 	 	 		test-gateway 		 			 				org.springframework.boot 				spring-boot-maven-plugin 			 		 	  
  二、创建项目配置文件bootstrap.ymlserver:     port: 80  spring:     profiles:        active: dev     application:         name: test-gateway     cloud:        nacos:           config:             namespace: ${spring.profiles.active}             server-addr: http://127.0.0.1:8848             extension-configs[0]:                      data-id: test_gateway_commons.yml                     group: DEFAULT_GROUP                     refresh: true  #Nacos动态路由配置,json格式 nacos:      gateway:           route:              config:                 data-id: gateway_dynamic_router                group: DEFAULT_GROUP
  a、test_gateway_commons.yml内容如下:#sentinel 相关配置 spring:      cloud:         sentinel:             transport:                  dashboard: http://127.0.0.1:8080                 port: 8719            scg:                  fallback:                     mode: response                    response-status: 455                    response-body: error!        nacos:            discovery:                namespace: dev               server-addr: 127.0.0.1:8848  management:        endpoints:              web:                exposure:                    include: "*"
  三、创建网关配置类 GatewayConfig.javaimport org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration;  @Configuration public class GatewayConfig {       public static final long DEFAULT_TIMEOUT = 30000;        public static String NACOS_SERVER_ADDR;        public static String NACOS_NAMESPACE;        public static String NACOS_ROUTE_DATA_ID;        public static String NACOS_ROUTE_GROUP;        @Value("${spring.cloud.nacos.discovery.server-addr}")       public void setNacosServerAddr(String nacosServerAddr) {         NACOS_SERVER_ADDR = nacosServerAddr;       }        @Value("${spring.cloud.nacos.discovery.namespace}")       public void setNacosNamespace(String nacosNamespace) {         NACOS_NAMESPACE = nacosNamespace;       }        @Value("${nacos.gateway.route.config.data-id}")       public void setNacosRouteDataId(String nacosRouteDataId) {         NACOS_ROUTE_DATA_ID = nacosRouteDataId;       }        @Value("${nacos.gateway.route.config.group}")       public void setNacosRouteGroup(String nacosRouteGroup) {         NACOS_ROUTE_GROUP = nacosRouteGroup;       } }
  四、创建动态路由服务DynamicRouteServiceImpl.javaimport org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.event.RefreshRoutesEvent; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionWriter; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.stereotype.Service;  import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Mono;   /**  * 动态更新路由网关service  * 1)实现一个Spring提供的事宜推送接口ApplicationEventPublisherAware  * 2)提供动态路由的基础方式,可通过获取bean操作该类的方式。该类提供新增路由、更新路由、删除路由,然后实现公布的功效。  */ @Slf4j @Service public class DynamicRouteServiceImpl implements ApplicationEventPublisherAware {       @Autowired         private RouteDefinitionWriter routeDefinitionWriter;          /**          * 公布事宜          */         @Autowired         private ApplicationEventPublisher publisher;          @Override         public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {             this.publisher = applicationEventPublisher;         }          /**          * 删除路由          * @param id          * @return          */         public String delete(String id) {             try {                 log.info("gateway delete route id {}",id);                 this.routeDefinitionWriter.delete(Mono.just(id));                 return "delete success";             } catch (Exception e) {                 return "delete fail";             }         }         /**          * 更新路由          * @param definition          * @return          */         public String update(RouteDefinition definition) {             try {                 log.info("gateway update route {}",definition);                 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 definition          * @return          */         public String add(RouteDefinition definition) {             log.info("gateway add route {}",definition);             routeDefinitionWriter.save(Mono.just(definition)).subscribe();             this.publisher.publishEvent(new RefreshRoutesEvent(this));             return "success";         } }
  五、创建通过Nacos读取动态路由配置服务DynamicRouteServiceImplByNacos.javaimport java.util.List; import java.util.Properties; import java.util.concurrent.Executor;  import javax.annotation.PostConstruct;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component;  import com.alibaba.fastjson.JSON; import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; import com.alibaba.nacos.api.exception.NacosException;  import lombok.extern.slf4j.Slf4j;  /**  *  * 通过nacos下发动态路由设置,监听Nacos中gateway-route设置  *  */ @Component @Slf4j @DependsOn({ "gatewayConfig" }) // 依赖于gatewayConfig bean public class DynamicRouteServiceImplByNacos {       @Autowired       private DynamicRouteServiceImpl dynamicRouteService;        private ConfigService configService;        @PostConstruct       public void init() {         log.info("gateway route init...");         try {           configService = initConfigService();           if (configService == null) {             log.warn("initConfigService fail");             return;           }           String configInfo = configService.getConfig(GatewayConfig.NACOS_ROUTE_DATA_ID,               GatewayConfig.NACOS_ROUTE_GROUP, GatewayConfig.DEFAULT_TIMEOUT);           log.info("获取网关当前设置:r {}", configInfo);           List definitionList = JSON.parseArray(configInfo, RouteDefinition.class);           for (RouteDefinition definition : definitionList) {             log.info("update route : {}", definition.toString());             dynamicRouteService.add(definition);           }         } catch (Exception e) {           log.error("初始化网关路由时发生错误", e);         }         dynamicRouteByNacosListener(GatewayConfig.NACOS_ROUTE_DATA_ID, GatewayConfig.NACOS_ROUTE_GROUP);       }        /**        * 监听Nacos下发的动态路由设置        *         * @param dataId        * @param group        */       public void dynamicRouteByNacosListener(String dataId, String group) {         try {           configService.addListener(dataId, group, new Listener() {             @Override             public void receiveConfigInfo(String configInfo) {               log.info("举行网关更新: r{}", configInfo);               List definitionList = JSON.parseArray(configInfo, RouteDefinition.class);               for (RouteDefinition definition : definitionList) {                 log.info("update route : {}", definition.toString());                 dynamicRouteService.update(definition);               }             }              @Override             public Executor getExecutor() {               log.info("getExecutor r");               return null;             }           });         } catch (NacosException e) {           log.error("从nacos吸收动态路由设置失足!!!", e);         }       }        /**        * 初始化网关路由 nacos config        *         * @return        */       private ConfigService initConfigService() {         try {           Properties properties = new Properties();           properties.setProperty("serverAddr", GatewayConfig.NACOS_SERVER_ADDR);           properties.setProperty("namespace", GatewayConfig.NACOS_NAMESPACE);           return configService = NacosFactory.createConfigService(properties);         } catch (Exception e) {           log.error("初始化网关路由时发生错误", e);           return null;         }       } }
  六、配置动态路由配置文件gateway_dynamic_router,内容如下:[{     "id": "user-admin-router",     "order": 5,     "predicates": [{         "args": {             "pattern": "/useradmin/**"         },         "name": "Path"     }],     "filters":[       {           "name":"StripPrefix",           "args":{"_genkey_0":1}       }     ],     "uri": "lb://test-user-admin" },{     "id": "user-app-router",     "order": 4,     "predicates": [{         "args": {             "pattern": "/users/**"         },         "name": "Path"     }],     "filters":[       {           "name":"StripPrefix",           "args":{"_genkey_0":1}       }     ],     "uri": "lb://test-user-app" }]
  通过以上步骤就完成Spring Gateway 集成Nacos 实现动态路由配置功能。以后只要通过修改Nacos的配置文件就可以时间服务的动态上下线了。不需要再重启网关了。

奔驰转发杨笠视频遭网友抵制近日,梅赛德斯奔驰也陷入巨大争议中。10月14日,梅赛德斯奔驰官方微博联手VOGUE转发了一段全新长轴距C级车的广告视频,视频中是脱口秀演员杨笠一身正装被闪光灯包围着走在红毯上,被弗利萨的儿子艾泽来地球复仇,超三悟天克斯直接被打断胳膊大家都知道弗利萨属于冰冻恶魔一族的,据说这个族群有个特点就是出生后冰冻睡眠会对战斗力有很大的影响。弗利萨大家都知道,出场时战斗力直接爆表,如果悟空没有变身超赛根本不是对手,而他出生全球首例无人车撞死行人视频流出,Uber安全员全程在看手机?Uber无人驾驶汽车撞死人一直是这两天的热点,本来Uber的自动驾驶技术已经很不靠谱,人工干预的平均里程只有1。1公里。对比起无人驾驶的老大Waymo,简直是弱爆了。要知道Waym口罩在磁共振检查中竟然也会伤人!警惕!又一起磁共振事故据韩国媒体KBS报道,韩国一名60岁男性患者在一次磁共振检查事故中丧生。事故的起因是携带氧气瓶进入检查室。当时,患者正躺在磁共振机器里,放在推车上的氧气瓶被推入检查室。这个氧气瓶高酷相思,梦落枫玉杵馀丹,金刀剩彩,重染吴江孤树。几点朱铅,几度怨啼秋暮。忆旧梦,绿鬓轻凋诉新恨,绛唇微注。最堪怜,月拂渐霜,绣蓉一镜晚妆妒。千林摇落渐少,何事西风老色,争妍如许。二月残花,空识小健澜科技ampampamp西湖论健医学影像机器人机智过人的背后在央视综合频道晚间黄金时段首播的机智过人各个项目正在紧锣密鼓地录制之中。这款由中国科学院和中央电视台共同打造的人工智能(AI)现象级节目,据信已筛选二十多个可代表AI最高水准的项目realmeGT大师套娃版正式发布,颜值与实力并存7月21日下午2点,realme正式发布了realmeGT大师版和大师探索版。作为两款主打设计的手机,售价肯定不如之前的realme那么劲爆,但对喜欢设计和手感的用户来说,也是一个魅族18正式发布,疯狂堆料的魅族值得买吗3月4日,魅族在珠海大剧院正式发布了魅族18系列,魅族有史以来最好的屏幕魅族有史以来最强的拍照魅族有史以来最贵的价格魅族18首先是魅族18,原以为会是魅族18系列的乞丐版,但魅族这motoedges正式发布,全球首发骁龙870在很早之前,就有人说过想看一款处理器的定位,看它的首发机型就行了。无论是今年发布的小米11(4000价位),还是之前发布的红米Note9Pro(1500价位)或者是iQOOZ1(2iQOO7正式发布,骁龙888120W超快闪充20210111,iQOO召开全感操控新品发布会,正式推出了全新5G性能旗舰iQOO7发布活动中,iQOO宣布与BMWMMotorsport延续全球顶级合作伙伴合作关系,继续共同传1999起,全方位提升,K40系列正式发布和之前爆料的一样,这次的K40系列产品力十足。不仅全系搭载三星AMOLEDE4直屏,并且厚度颜值都得到了全面提升,话不多说,直接来看吧。红米K40首先是RedmiK40。作为K30
如何慧眼识精品,一步到位拿下好产品每年旅行行业使用讲解器的高峰期就在放长假那段时间,而其他各大会议展会接待需要用到讲解器的时间更是数不胜数,各地公司这么多,举办展会这些都是不在少数。那么用到讲解器的地方这么多,你就网约车,越来越好跑了网约车现在是越来越好跑了,因为各家平台一直在努力首先随着相关政策的实施对司机实行人性化关怀。随着合规化政策的实施,平台逐步不给违规司机派单,鼓励大家办车证,虽然办车证让合规司机投入这四所高校,被称为人工智能专业的四大天王,考到人生就稳了在这个信息飞速发展的大数据时代,人工智能已经融入到了我们的生活中,不管是智能手机还是智能家居还是智能生产和学生们的课堂上等等这些领域,我们已经离不开人工智能了,它跟我们的生活息息相当年被称为彩电大王的长虹电视,为何现在买的人越来越少?要说哪个品牌的电视最实用,在老一辈人的眼里必定有长虹电视,时间退回到几十年前,可以说家家户户都会有一两个长虹的家用电器设备,那个时代长虹几乎是垄断了国内的家电市场,按照公开数据显示一机可做多种美食,加入鸿蒙智联后的九阳破壁机更值得使用了破壁机大家应该都不陌生,家里经常用的到的厨房小家电。机友家里之前也有一款破壁机产品,每天早上媳妇使用的时候,呜呜的声音都快成为了我的定时闹铃了,胜在每次研磨还比较细腻,就一直以为这vivoTWS2颜值纯美主动降噪,给你超乎想象的好声音目前,手机普遍都取消了3。5mm耳机插口,许多音乐爱好者只能选择购买真无线蓝牙耳机替代传统的有线耳机,虽然TWS耳机体积小巧便于收纳携带,但音质表现往往不尽如人意,而且根本没有降噪雷克沙时光机M2测评存储新形态,打造个人云盘从未如此简单导读在如今科技飞速发展的当下,我们拥有众多的电子设备,手机平板相机电脑等等。在其使用过程中存储着大量的数据,例如照片音乐视频文档等等,那么如何存储这些数据对于我们每一个人来说,都是阿里巴巴Q2财报全球消费者单季增长6200万来源读特11月18日,阿里巴巴集团发布2022财年第二季度财报。财报显示,阿里巴巴服务的全球年度活跃消费者单季增长约6200万,在科技创新方面的扎实投入也开始收获阶段成果,背后呈现光储充放,新能源的下一个万亿赛道?资本眼文金融街老李未来的智能电动车不仅要为人类打工,还要为太阳打工。老李上周和朋友策划了一部纪录片,讲的是智能电动车的未来,内容大概是在未来的智慧城市中,智能电动车是车辆能源交通通信和环全球80脱碳资源掌握在3个国家手中日媒新能源汽车发展或受阻日媒称,全球80脱碳资源掌握在极少数的3个国家手中。据日本经济新闻网站报道,现在,全球矿产资源的采购难度越来越大。因为电动汽车使用的资源产地比石油等传统资源更加集中。锂和钴储量位居四大必玩赛道逻辑再梳理新能源代糖医美电子烟老粉知道,大概两年前已经总结了这四大必玩赛道,最少应该参与其中两条赛道投资,因为他们是历史大趋势,是广阔蓝海,有巨大的增量空间和高两位数的业绩增速预期。两年过去,新能源跑出十倍股的