Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理

家住魔仙堡 提交于 2019-12-06 06:44:55
随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代。`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Cloud Eureka`、`Spring Cloud Ribbon`、`Spring Cloud Hystrix`、`Spring Cloud Zuul`等等。依赖`Spring`强大生态环境,其已经成为`Java`开发人员构建微服务系统首选解决方案。 本系列文章将带大家认识另一个微服务解决方案`Spring Cloud Alibaba`。依托于`Alibaba`强大的技术支撑,以及`Eureka2.x`不再维护等因素,相信不久的将来`Spring Cloud Alibaba`将会成为大多数公司进行微服务实践的更优选择。 --- 下面向大家介绍[Nacos](https://nacos.io/zh-cn/)的服务注册发现与配置管理功能。 > Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 > > Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 ## 一、注册发现 首先需要下载[Nacos](https://github.com/alibaba/nacos/releases),下载完成直接解压,接下来启动`Nacos` ```bash cd nacos/bin // Linux/Unix/Mac sh startup.sh -m standalone // Windows cmd startup.cmd -m standalone ``` 上面即使用独立的方式启动`Nacos`,启动完成之后访问[Nacos首页](http://127.0.0.1:8848/nacos),默认登录账号和密码都是nacos 登录成功之后,可以看见如下图 ![file](https://img2018.cnblogs.com/blog/1882209/201912/1882209-20191201160846948-1735474542.jpg) 接下来创建一个服务注册到`Nacos` 1. 首先创建一个父项目管理依赖,`pom.xml`如下 ```xml 4.0.0service-providerorg.springframework.bootspring-boot-starter-parent2.1.8.RELEASEcom.examplespring-cloud-alibaba-demo0.0.1-SNAPSHOTalibaba-demopomDemo project for Spring Boot1.8Greenwich.RELEASE2.1.1.RELEASEorg.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring-cloud-alibaba.version}pomimportorg.springframework.bootspring-boot-maven-plugin ``` 2. 然后创建子模块`service-provider`,`pom.xml`如下 ```xml spring-cloud-alibaba-democom.example0.0.1-SNAPSHOT4.0.0service-providerorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatorcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-maven-plugin ``` 3. 在`service-provider`模块中添加`bootstrap.yml`配置文件,文件内容如下: ```yaml spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 application: name: service-provider main: allow-bean-definition-overriding: true server: port: 8080 ``` 上面的配置指定了服务注册发现地址 3. 启动类代码 ```java @EnableDiscoveryClient @SpringBootApplication public class ServiceProviderApplication { public static void main(String[] args) { SpringApplication.run(ServiceProviderApplication.class, args); } } ``` 然后启动`service-provider`,即可在`Nacos`的服务列表中观察到已经注册上去的服务 ![file](https://img2018.cnblogs.com/blog/1882209/201912/1882209-20191201160847217-1931490178.jpg) 通过`Nacos`提供的[Open-API](https://nacos.io/zh-cn/docs/open-api.html)可以看到已经注册的服务列表 ```bash ➜ ~ curl -X GET '127.0.0.1:8848/nacos/v1/ns/service/list?pageNo=1&pageSize=10' {"count":1,"doms":["service-provider"]}% ➜ ~ ``` 到此已经完成的服务注册的基本使用,接下来介绍配置管理的使用 ## 二、配置管理 为了方便,我直接对`service-provider`项目进行改造演示 1. 修改`pom.xml`文件 ```xml spring-cloud-alibaba-democom.example0.0.1-SNAPSHOT4.0.0service-providerorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatorcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverycom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configorg.springframework.bootspring-boot-maven-plugin ``` 新增了`spring-cloud-starter-alibaba-nacos-config`依赖 2. 修改`bootstrap.yml` ```yaml spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} application: name: service-provider main: allow-bean-definition-overriding: true server: port: 8080 ``` 上面的配置指定配置管理服务地址 3. 修改启动类代码 ```java @RefreshScope @RestController @EnableDiscoveryClient @SpringBootApplication public class ServiceProviderApplication { @Value("${config.test}") private String testConfigValue; @GetMapping("/config") public String getConfigValue() { return testConfigValue; } public static void main(String[] args) { SpringApplication.run(ServiceProviderApplication.class, args); } } ``` 添加`@RefreshScope`是支持动态配置更新 4. 添加`Nacos`配置文件 ![file](https://img2018.cnblogs.com/blog/1882209/201912/1882209-20191201160847462-424649041.jpg) 然后启动项目观察控制台日志输出 ``` 2019-12-01 15:44:39.097 INFO 19295 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: 'service-provider.properties', group: 'DEFAULT_GROUP', data: config.test=这是一个测试值 ``` 可以看到本地服务已经获取到`Nacos`配置管理中的数据了。尝试通过接口访问数据 ```bash ➜ ~ curl -X GET '127.0.0.1:8080/config' 这是一个测试值% ➜ ~ ``` 正确获取到配置数据,接下来尝试修改配置数据 ![file](https://img2018.cnblogs.com/blog/1882209/201912/1882209-20191201160847684-1418772637.jpg) 查看控制台日志 ``` 2019-12-01 15:47:25.694 INFO 19295 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [config.test] ``` 说明已经修改成功,服务同步到最新的配置了。尝试通过接口访问数据 ```bash ➜ ~ curl -X GET '127.0.0.1:8080/config' 这是一个测试值-修改后% ➜ ~ ``` 配置动态更新也已经生效。[项目源码](https://github.com/lish1le/spring-cloud-alibaba-demo) > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?from=article_bottom) 发布!
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!