Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理
随着微服务概念的流行,越来越多的公司采用`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
登录成功之后,可以看见如下图

接下来创建一个服务注册到`Nacos`
1. 首先创建一个父项目管理依赖,`pom.xml`如下
```xml
4.0.0
service-provider
org.springframework.boot
spring-boot-starter-parent
2.1.8.RELEASE
com.example
alibaba-demo
0.0.1-SNAPSHOT
alibaba-demo
pom
Demo project for Spring Boot
1.8
Greenwich.RELEASE
2.1.1.RELEASE
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
```
2. 然后创建子模块`service-provider`,`pom.xml`如下
```xml
alibaba-demo
com.example
0.0.1-SNAPSHOT
4.0.0
service-provider
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-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`的服务列表中观察到已经注册上去的服务

通过`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
alibaba-demo
com.example
0.0.1-SNAPSHOT
4.0.0
service-provider
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-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`配置文件

然后启动项目观察控制台日志输出
```
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'
这是一个测试值%
➜ ~
```
正确获取到配置数据,接下来尝试修改配置数据

查看控制台日志
```
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) 发布!
Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理的更多相关文章
- Spring Cloud Alibaba基础教程-Nacos(三)
在Spring Cloud Alibaba基础教程-Nacos(二)当中学习了,如何使用 nacos图形化界面操作 ,使用Nacos部署集群,下面我们开始Nacos最后一篇的学习 ,如果对你有帮助,记 ...
- Spring Cloud Alibaba基础教程-Nacos(二)
在Spring Cloud Alibaba基础教程-Nacos(一)当中学习了,如何从 nacos当中 通过Java的方式获取值,以及连接数据库,下面我们开始第二篇的学习 ,如果对你有帮助,方便下次寻 ...
- Spring Cloud Alibaba基础教程-Nacos(一)
2019快结束,也有很久没写博客了,今天我们来谈谈Nacos,如果对您有帮助,麻烦左上角点个关注 ,谢谢 ! 嘻嘻 今天先写第一篇 文章目录 为什么要使用Nacos Eureka 闭源 Nacos的优 ...
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...
- Spring Cloud Alibaba基础教程:Nacos的集群部署
继续说说生产环境的Nacos搭建,通过上一篇<Spring Cloud Alibaba基础教程:Nacos的数据持久化>的介绍,我们已经知道Nacos对配置信息的存储原理,在集群搭建的时候 ...
- Spring Cloud Alibaba基础教程:Nacos的数据持久化
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- Spring Cloud Alibaba基础教程:Nacos配置的多环境管理
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式(Res ...
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
通过本教程的前两篇: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方 ...
随机推荐
- 函数基础(三) 装饰器\闭包 day 12
目录 昨日回顾 可变长参数 * ** 函数对象 函数嵌套 名称空间和作用域 今日内容 闭包函数 装饰器 语法糖 装饰器模板 迭代器 昨日回顾 可变长参数 * *形参:接受多余的位置实参 *实参(可迭代 ...
- Mycat分布式数据库架构解决方案--配置defaultAccount属性报错解决方案
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文章 ...
- Method Not Allowed (GET): /boxuegos/index/ 错误
1,Method Not Allowed (GET) 请求方法不被允许, 错误原因:我调用的是index这个方法,但是我上面定义了一个空的子路由,所以页面加载不了,控制台出现Method Not Al ...
- Spring Cloud gateway 网关服务二 断言、过滤器
微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...
- IntelliJ IDEA 配置Maven仓库
1. 下载Maven 官方地址:http://maven.apache.org/download.cgi 2. 修改本地仓库路径 3. 设置环境变量 MAVEN_HOME: E:\DevelopEnv ...
- 在线预览office文件
Office Online 实现在线预览 office的在线预览,针对不同的浏览器版本和系统具有要求,具体的相关文档请参考官方文档. 利用office online 平台进行office 文档的在线查 ...
- win系统下之docker安装centos7镜像
1) 拉取镜像 输入命令docker pull centos:7 从仓库拉取centos7的镜像 2) 查看本地镜像 命令:docker images 可以查看已经把centos的镜像拉取 ...
- python基础-字典dict
字典-dict 用途: 定义方法:通过{} 来存储数据,通过key:value (键值对)来存储数据,每个键值对通过逗号分隔.在键值对中,key 是不可变的数据类型,value 是任意数据类型 def ...
- python pytesseract使用
正确使用方法 1.tesseract-orc安装 tesseract-ocr-setup-3.05.00dev.exe下载 2.pytesseract pip install pytesseract ...
- python 3.7.5 官方tutorial 学习笔记
用了好久python,还没有完整看过官方的tutorial,这几天抽空看了下,还是学到些东西 --- Table of Contents 1. 课前甜点 2. 使用 Python 解释器 2.1. 调 ...