激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 關于springboot中nacos動態路由的配置

關于springboot中nacos動態路由的配置

2021-12-28 13:20Spring王不正 Java教程

這篇文章主要介紹了springboot中nacos動態路由的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

nacos動態路由的配置

什么都不說了,springboot-nacos 不懂得的下面自行學習啦我直接貼下代碼!

首先。。。

我自己有個服務器。在無聊之時寫的代碼,主要是通過網關來調用接口所以有了下面的代碼。

1.作為一個動態路由維護管理的類

@Service
public 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;
  }

2.基于Nacos動態配置路由服務

@Component
public class DynamicRouteServiceImplByNacos implements CommandLineRunner {
  private static final Logger logger = LoggerFactory.getLogger(DynamicRouteServiceImplByNacos.class);
  @Autowired
  private DynamicRouteServiceImpl dynamicRouteService;
  @Value("${spring.cloud.nacos.discovery.server-addr}")
  private String address;
  @Value("${config.dataId}")
  private String dataId;
  @Value("${config.groupId}")
  private String groupId;
  @Value("${config.timeout}")
  private Long timeout;
 /* @Value("${config.ignore}")
  private String ignore;*/
  /**
   * 監聽Nacos Server下發的動態路由配置
   */
  public void dynamicRouteByNacosListener() {
      try {
          ConfigService configService = NacosFactory.createConfigService(address);
          configService.addListener(dataId, groupId, new Listener() {
              @Override
              public void receiveConfigInfo(String configInfo) {
                  try {
                      logger.info("================Nacos 配置中心路由配置信息已修改================\n" + configInfo + "\n\n");
                      List<RouteDefinition> list = JSON.parseArray(configInfo, RouteDefinition.class);
                      list.forEach(definition -> {
                          dynamicRouteService.update(definition);
                      });
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
              @Override
              public Executor getExecutor() {
                  return null;
              }
          });
          /*configService.addListener(ignore, groupId, new Listener() {
              @Override
              public void receiveConfigInfo(String configInfo) {
                  try {
                      logger.info("================Nacos 配置中心忽略URL配置已修改================\n" + configInfo + "\n\n");
                      logger.info("\n" + configInfo + "\n\n");
                      List<String> ignoreList = JSON.parseArray(configInfo, String.class);
                      IgnoreRouteConfig.setIgnoreRouteArr(ignoreList);
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
              @Override
              public Executor getExecutor() {
                  return null;
              }
          });*/
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
  @Override
  public void run(String... args) throws Exception {
      dynamicRouteByNacosListener();
  }
}

3.yml配置

關于springboot中nacos動態路由的配置

4. nacos網關配置

關于springboot中nacos動態路由的配置

5.最后:我建的是

父子工程兩個服務發到服務器后 注意注意注意!!!:一定要開啟防火墻,登上阿里云自己的服務增加端口,然后再linux中也要增加端口 linux防火墻相關命令

  • 刪除 firewall-cmd --zone= public --remove-port=80/tcp --permanent
  • 開放 firewall-cmd --zone=public --add-port=1935/tcp --permanent
  • 查看狀態 systemctl status firewalld
  • 啟動 systemctl start firewalld
  • 查看已開啟端口 firewall-cmd --list-ports
  • 重啟 firewall-cmd --reload

關于springboot中nacos動態路由的配置

yml配置文件中 有一個這個端口 這個也要在阿里云上面還有服務器開啟

這個就是接口訪問時的網關端口號

關于springboot中nacos動態路由的配置

 

Springboot配置Nacos出現的問題

報錯信息

java.lang.ClassNotFoundException:org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata

由于當前Nacos版本還不支持Springboot 2.4.+ 的版本,所以需要降一個版本 為2.3.+

具體如下

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@1f89ab83]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:270) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:762) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:567) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:144) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:212) ~[spring-cloud-context-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:117) ~[spring-cloud-context-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:74) ~[spring-cloud-context-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63) ~[spring-boot-2.4.5.jar:2.4.5]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) ~[na:na]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:62) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:375) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:333) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) ~[spring-boot-2.4.5.jar:2.4.5]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) ~[spring-boot-2.4.5.jar:2.4.5]
	at com.lenyuqin.product.ProductApplication.main(ProductApplication.java:14) ~[classes/:na]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@1f89ab83]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.6.jar:5.3.6]
	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~[spring-core-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:232) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:210) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:149) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:294) ~[spring-context-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1098) ~[spring-beans-5.3.6.jar:5.3.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.3.6.jar:5.3.6]
	... 31 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3167) ~[na:na]
	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2310) ~[na:na]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.6.jar:5.3.6]
	... 38 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) ~[na:na]
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
	... 42 common frames omitted

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/m0_46379371/article/details/113247647

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 成人aaaa免费全部观看 | 天堂在线中文资源 | 美女视频网站黄色 | 欧美日韩在线视频一区 | 天天色狠狠干 | 伊人999| 成人免费av在线播放 | 日本高清电影在线播放 | 黄色毛片视频在线观看 | 国产精品福利一区 | 国产乱一区二区三区视频 | av国语| 成人免费一区二区 | 九九热这里只有精品8 | 成人aaaaa片毛片按摩 | 国产精品色综合 | 久久久久久久国产a∨ | 毛片在线视频观看 | 欧美一区二区三区不卡免费观看 | 久久久久久久久久综合 | 国产一区二区三区欧美 | 久久久久久久久成人 | 亚洲xxx在线观看 | 国产精品啪一品二区三区粉嫩 | 午夜精品成人 | 九九黄色 | 国产噜噜噜噜久久久久久久久 | 日本一级毛片在线播放 | 国产免费黄色 | 亚洲成在人 | 成年人免费视频大全 | 中文字幕在线观看1 | 欧美一级做性受免费大片免费 | 国产精品视频yy9299一区 | 久久久久免费精品 | 高清国产免费 | 免费a观看 | 精品呦女| 一区二区三区四区高清视频 | 欧美一级黄色免费看 | 亚洲人成网站免费播放 |