当前位置: 首页 > 科技观察

Springboot 项目集成 Nacos 实现服务注册发现与配置管理

时间:2023-03-18 19:32:05 科技观察

Springboot项目集成Nacos实现服务注册发现和配置管理本文转载请联系Java极客技术公众号。大家好,我是阿芬。上一篇文章介绍了如何在本地搭建微服务环境下的服务注册中心和配置管理中心Nacos。今天,我们就通过SpringBoot项目集成Nacos来给大家演示一下。如何使用Nacos实现服务发现和配置管理。启动Nacos服务启动本地构建的Nacos服务后,我们可以看到在当前服务管理下的服务列表中,三个命名空间下都没有任何服务。这是正常的,因为我们还没有访问Nacos的服务。Nacos服务启动成功后,我们再创建两个SpringBoot项目,一个作为服务提供者Producer访问Nacos服务注册与发现和配置中心,另一个只访问Nacos服务注册与发现,并调用Producer获取配置中心的参数,我们调用Consumer。服务提供者Producer1。我们首先创建一个SpringBoot项目,bootstrap.properties文件内容如下:spring.application.name=producer########################配置中心配置#####################################指定的命名空间只会在对应的命名空间中找到对应的配置文件spring.cloud.nacos.config.namespace=caeser-adsys-namingspring.cloud.nacos.config.file-extension=properties#配置组名spring.cloud.nacos.config.group=TEST1#配置文件,在数组的形式,可以是多个,依次递增spring.cloud.nacos.config.ext-config[0].data-id=com.example.propertiesspring.cloud.nacos.config.ext-config[0].group=TEST1#配置中心地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848#开启自动刷新对应配置文件spring.cloud.nacos.config.ext-config[0].refresh=true#######################服务注册发现配置####################################服务集群名称spring.cloud.nacos.discovery.cluster-name=TEST1_GROUP#服务注册地址spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848#Servicenamespacespring.cloud.nacos.discovery.namespace=caeser-adsys-naming2.application.properties文件内容如下,主要是一个端口,其他配置根据情况增删:#Servicestartup端口server.port=8080spring.main。allow-bean-definition-overriding=true#tomcat配置server.tomcat.max-threads=500spring.mvc.servlet.load-on-startup=1spring.servlet.multipart.max-file-size=40MBspring.servlet.multipart。max-request-size=100MB#日志配置logging.level.root=infologging.level.com.alibaba=errorlogging.pattern.console=%clr{[%level]}{green}[%d{yyyy-MM-ddHH:mm:ss}]%clr{[${PID:-}]}{faint}%clr{[%thread]}{magenta}%clr{[%-40.40logger{80}:%line]}{cyan}%msg%n3.在启动类上面添加如下注解packagecom.ziyou.nacos.demo.producer;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cache.annotation.EnableCaching;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication(scanBasePackages="com.ziyou.nacos")@EnableDiscoveryClient@EnableCachingpublicclassProducerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProducerApplication.class,args);}}4.pom.xml文件内容如下:<?xmlversion="1.0"encoding="UTF-8"?>4.0.0org.examplenacos-demo1.0-SNAPSHOT生产者1.0-SNAPSHOTproducerMavenWebapphttp://www.example.comUTF-81.71.7<弹簧.maven.plugin.version>2.2.2.RELEASEorg.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-loggingorg.springframework.bootspring-boot-starter-log4j2org.springframework。bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverysrc/main/resourcestrue**/**producerorg.springframework.bootspring-boot-maven-plugin${spring.maven.plugin.version}<执行><执行><目标>重新打包5.在Producer端提供收购取配置里面内容的接口,代码如下:packagecom.ziyou.nacos.demo.producer.controller;importcom.ziyou.nacos.demo.producer.config.UserConfig;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/***
*功能:
*作者:@authorziyou
*日期:2021-04-1119:59
*作者:
*/@RestController@RequestMapping(value="producer")publicclassProducerController{privateUserConfiguserConfig;@GetMapping("/getUsername")privateStringgetUsername(){Stringresult=userConfig.getUsername()+"-"+userConfig.getPassword();System.out.println(result);returnresult;}@AutowiredpublicvoidsetUserConfig(UserConfiguserConfig){this.userConfig=userConfig;}}packagecom.ziyou.nacos.demo.producer.config;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.cloud.context.config.annotation.RefreshScope;importorg.springframework.stereotype.Component;/***
*函数:
*作者:@authorziyou
*日期:2021-04-1120:39
*描述:
*/@RefreshScope@ComponentpublicclassUserConfig{@Value("${username}")privateStringusername;@Value("${password}")privateStringpassword;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}}6.启动Producer,手动调用接口。启动Producer后,我们可以在Nacos服务注册列表中看到如下图,在test1的命名空间下,已经有我们创建的Producer服务7.手动调用Producer接口http://127.0.0.1:8080/producer/getUsername显示如下内容我们再看看此时Nacos配置中心的配置文件com.example.properties中的内容。有时我们手动将配置中password参数的值改为JavaGeek666,再次访问界面,会发现界面的输出也自动改变了。修改配置内容如下:重访结果如下:ServicecallerConsumer我们完成了Producer的服务注册和配置动效功能。这个时候基本就可以使用了,但是我们还需要通过Nacos进一步实现服务发现,接下来我们创建ConsumerSpringBoot项目,配置文件和pom.xml文件基本一样,只是修改端口和对应的地方,下面把不同的地方贴上1.boostrap.properties的内容如下,因为这里我们只调用Producer接口,不需要连接到Nacos的配置中心,所以这里只配置service注册和发现spring.application.name=consumer#####################################################注册发现配置##################################spring.cloud.nacos.discovery.cluster-name=TEST1_GROUPspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.cloud.nacos.discovery.namespace=caeser-adsys-naming2。启动类,配置feignClient需要扫描packagecom.ziyou.nacos.demo的包路径。消费者;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cache.annotation.EnableCaching;importorg.springframework.cloud.openfeign.EnableFeignClients;/***
*功能:
*作者:@authorziyou
*日期:*描述:
*/@SpringBootApplication(scanBasePackages="com.ziyou.nacos")@EnableFeignClients(basePackages={"com.ziyou.nacos.demo.consumer.rpc"})@EnableCachingpublicclassConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ConsumerApplication.class,args);}}3.写一个调用Producer的接口,FeignClient中的值为Producer应用名称packagecom.ziyou.nacos.demo.consumer.rpc;importorg.springframework.cloud.openfeign.FeignClient;importorg.springframework.stereotype.Component;importorg.springframework.web.bind.annotation.GetMapping;/***
*功能:
*作者:@authorziyou
*日期:2021-04-1120:01
*Desc:none
*/@FeignClient(value="producer")@ComponentpublicinterfaceIProducerFeign{/***获取生产者名称接口**@return*/@GetMapping("/producer/getUsername")StringgetUsername();}packagecom.ziyou.nacos.demo.consumer.controller;importcom.ziyou.nacos.demo.consumer.rpc.IProducerFeign;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/***
*功能:
*作者:@authorziyou
*日期:2021-04-1119:59
*描述:
*/@RestController@RequestMapping(value="consumer")publicclassTestNacosController{privateIProducerFeigniProducerFeign;@GetMapping("/testNacos")privateStringtestNacos(){returniProducerFeign.getUsername();}@AutowiredpublicvoidsetiProducerFeign(IProducerFeigniProducerFeign=duducerFeignc)}er.duthis启动Consumer,我们可以在Nacos中看到如下图5.调用消费者接口consumer/testNacos,结果如下图,此时换Nacos也是一样Consumer端也可以实时更新配置文件中的内容。有兴趣的朋友可以自己尝试一下。今天主要介绍如何通过SpringBoot项目访问Naocs,实现服务注册和发现,以及配置管理和动态化。刷新,相关代码已经上传到GitHub。