想要了解更多Nacos教程,欢迎star《on-nacos》开源项目。基于Nacos2.x的介绍、原理、源码、实战介绍,帮助开发者快速上手Nacos。本文介绍如何在SpringCloud项目中使用Nacos。Nacos主要分为两部分,配置中心和服务注册与发现。在SpringCloud项目中使用Nacos,首先要保证Nacos服务已经启动。详情请参考《快速上手 Nacos》搭建单机Nacos服务。Nacos连接SpringCloud的源码可以参考spring-cloud-alibaba项目,有兴趣的朋友可以查看源码。SpringCloudAlibaba的版本对应可参考:ReleaseNotesWiki本文详细代码示例,点击【nacos-spring-cloud】查看配置中心,创建配置,打开控制台http://127.0.0.1:8848/nacos,进入配置管理-配置列表点击+号新建配置。下面是数据源配置的例子:nacos-datasource.yamlspring:datasource:name:datasourceurl:jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useDynamicCharsetInfo=false&useSSL=false用户名:root密码:rootdriverClassName:com.mysql.jdbc.Driver依赖配置创建完成后,可以在控制台配置管理-配置列表中查看。接下来演示如何在SpringCloud项目中获取Nacos中的配置信息。项目中需要添加如下依赖:com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config${latest.version}如果项目的SpringBoot版本低于2.4.0,需要在项目中创建bootstrap.properties,然后添加一些配置nacos在项目的bootstrap.properties文件中:spring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.name=nacos-datasourcespring.cloud.nacos.config.file-extension=yamlspring.cloud.nacos.config.username=nacosspring.cloud.nacos.config.password=nacosSpringBoot2.4.0版本默认不启动bootstrap容器。本项目演示如何在Springboot<2.4.0版本中使用nacos。如果SpringBoot版本≥2.4.0,可以参考**NacosConfig2.4.x示例进行配置。在SpringCloudAlibaba中,NacosdataId的拼接格式为:${prefix}-${spring.profiles.active}。${file-extension}prefix默认为spring.application.name的值,也可以通过配置项@spring.cloud.nacos.config.prefix进行配置。spring.profiles.active是当前环境对应的profile。具体可以参考SpringBoot文档。注意,当activeprofile为空时,对应的connector-将不存在,dataId的拼接格式变为${prefix}。${file-extension}file-extension是配置内容的数据格式,可以是通过配置项spring.cloud.nacos.config.file-extension配置。获取配置@Value注解获取配置/***@authorlixiaoshuang*/@RestController@RequestMapping(path="springcloud/nacos/config")publicclassAnnotationGetController{@Value(value="${spring.datasource.name:}")私有字符串名称;@Value(value="${spring.datasource.url:}")privateStringurl;@Value(value="${spring.datasource.username:}")私有字符串用户名;@Value(value="${spring.datasource.password:}")私有字符串密码;@Value(value="${spring.datasource.driverClassName:}")privateStringdriverClassName;@GetMapping(path="annotation/get")privateMapgetNacosDataSource2(){Mapresult=newHashMap<>();result.put("名字",名字);结果.put("url",url);result.put("用户名",用户名);结果.put("password",password);result.put("driverClassName",driverClassName);returnresult;}}启动服务后,通过访问http://localhost:8333/springcloud/nacos/config/annotation/get获取配置信息@ConfigurationProperties注解绑定配置到类/***@authorlixiaoshuang*/@Data@ConfigurationProperties(prefix="spring.datasource")@ComponentpublicclassNacosDataSourceConfig{privateStringname;privateStringurl;privateStringusername;privateStringpassword;privateStringdriverClassName;}/***@authorlixiaoshuang*/@RestController@RequestMapping(path="springcloud/nacos/config")publicclassBindingClassController{@ResourceprivateNacosDataSourceConfignacosDataSourceConfig;@GetMapping(path="binding/class/get")privateMapgetNacosDataSource(){Mapresult=newHashMap<>();result.put("name",nacosDataSourceConfig.getName());result.put("url",nacosDataSourceConfig.getUrl());result.put("用户名",nacosDataSourceConfig.getUsername());result.put("密码",nacosDataSourceConfig.getPassword());result.put("driverClassName",nacosDataSourceConfig.getDriverClassName());returnresult;}}启动服务后访问http://localhost:8333/springcloud/nacos/config/binding/class/get获取配置信息服务注册&发现服务注册在项目中添加如下依赖:com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery${latest.version}然后在项目的application.properties文件中添加nacos的一些配置:spring.cloud.nacos。discovery.server-addr=127.0.0.1:8848spring.cloud.nacos.discovery.username=naocsspring.cloud.nacos.discovery.password=nacos添加配置启动服务后看到如下日志,说明服务注册成功Nacos注册中心安装,DEFAULT_GROUPSPRING-CLOUD-CONFIG192.168.1.8:8444注册完成服务发现集成@LoadBalancedRestTemplate先模拟一个订单服务的接口,可以通过服务发现调用/***@authorlixiaoshuang*/@RestControllerpublicclassOrderServiceController{@GetMapping("/order/{orderid}")publicStringecho(@PathVariableStringorderid){System.out.println("收到远程调用订单服务请求");return"[ORDER]:"+"订单id:["+orderid+"]"的订单信息;}}先访问http://localhost:8444/order/1234,获取订单id为1234的订单信息,看接口是否可以连接:接下来模拟一个业务接口,调用订单接口。这里RestTemplate通过@LoadBalanced注解具有负载均衡和服务发现的能力,可以通过指定服务名来调用。/***@authorlixiaoshuang*/@RestControllerpublicclassRestTemplateController{@AutowiredpublicRestTemplaterestTemplate;@Bean@LoadBalancedpublicRestTemplateRestTemplate(){返回新的RestTemplate();}@GetMapping("/call/order/{orderid}")publicStringcallEcho(@PathVariableStringorderid){//访问应用的RESTSPRING-CLOUD-CONFIG"/order/{orderid}"returnrestTemplate.getForObject("http://SPRING-CLOUD-CONFIG/order/"+orderid,String.class);}}访问接口http://localhost:8444/call/order/1234获取订单1234的订单信息,内部会通过服务名SPRING-CLOUD-CONFIG发现服务,调用/order/{orderid}获取订单信息的接口。观察订单服务的日志,会发现远程调用的日志