随着微服务概念的流行,越来越多的公司采用`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-20191201160225854-898630136.jpg)

接下来创建一个服务注册到`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`的服务列表中观察到已经注册上去的服务
![file](https://img2018.cnblogs.com/blog/1882209/201912/1882209-20191201160226130-1148062490.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

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`配置文件

![file](https://img2018.cnblogs.com/blog/1882209/201912/1882209-20191201160226374-892726299.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-20191201160226646-331639083.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) 发布!

Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理的更多相关文章

  1. Spring Cloud Alibaba基础教程-Nacos(三)

    在Spring Cloud Alibaba基础教程-Nacos(二)当中学习了,如何使用 nacos图形化界面操作 ,使用Nacos部署集群,下面我们开始Nacos最后一篇的学习 ,如果对你有帮助,记 ...

  2. Spring Cloud Alibaba基础教程-Nacos(二)

    在Spring Cloud Alibaba基础教程-Nacos(一)当中学习了,如何从 nacos当中 通过Java的方式获取值,以及连接数据库,下面我们开始第二篇的学习 ,如果对你有帮助,方便下次寻 ...

  3. Spring Cloud Alibaba基础教程-Nacos(一)

    2019快结束,也有很久没写博客了,今天我们来谈谈Nacos,如果对您有帮助,麻烦左上角点个关注 ,谢谢 ! 嘻嘻 今天先写第一篇 文章目录 为什么要使用Nacos Eureka 闭源 Nacos的优 ...

  4. Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

    自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...

  5. Spring Cloud Alibaba基础教程:Nacos的集群部署

    继续说说生产环境的Nacos搭建,通过上一篇<Spring Cloud Alibaba基础教程:Nacos的数据持久化>的介绍,我们已经知道Nacos对配置信息的存储原理,在集群搭建的时候 ...

  6. Spring Cloud Alibaba基础教程:Nacos的数据持久化

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  7. Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  8. Spring Cloud Alibaba基础教程:Nacos配置的多环境管理

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  9. Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式(Res ...

  10. Spring Cloud Alibaba基础教程:使用Nacos作为配置中心

    通过本教程的前两篇: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方 ...

随机推荐

  1. unity 之 自定义弹出框

    一.弹出框的搭建: 布局如图:Message为整个父物体,并且添加UiMessage代码.panel为遮罩. MessageBox为整个提示框,Panel为标题,ok为确定按钮,cancel为取消按钮 ...

  2. kali2019里安装Burp Suite安装破解版加汉化版

    Burpsuite是一个强大web漏洞挖掘工具,截断代理,解码和编码,Fuzzy进行各种注入和暴力破解 插件扩展,有多个模块 Burp Suite没有中文版的,我英语又不好,我虽然精通Burp Sui ...

  3. 深度学习框架Tensorflow应用(Google工程师)

    首先在这里给大家分享Google工程师亲授 Tensorflow2.0-入门到进阶教程 有需要的小伙伴可点击进入扣群下载,群内不定期的会分享资料教程,点击直达链接:https://jq.qq.com/ ...

  4. 基于AOP和Redis实现对接口调用情况的监控及IP限流

    目录 需求描述 概要设计 代码实现 参考资料 需求描述 项目中有许多接口,现在我们需要实现一个功能对接口调用情况进行统计,主要功能如下: 需求一:实现对每个接口,每天的调用次数做记录: 需求二:如果某 ...

  5. 使用position设置经典的网站前端结构

    能脱离文档流的设置: float:left/right position:absolute; 绝对定位 position:fixed; 固定定位 //搞清楚position的属性值的意思就容易明白 使 ...

  6. 来,我们手写一个简易版的mock.js吧(模拟fetch && Ajax请求)

    预期的mock的使用方式 首先我们从使用的角度出发,思考编码过程 M1. 通过配置文件配置url和response M2. 自动检测环境为开发环境时启动Mock.js M3. mock代码能直接覆盖g ...

  7. VM 使用问题 | 安装失败->>注册表

    下午乌龙了一回,本来就知道注册表都卸载的乱乱的 以为安装上即可,越弄越糊涂 无法安装.... 查了注册表,发现那些都删除了 手动安装实在太过麻烦,弄了一早上. 如图:未能解决 ​ ​ ​ 后使用了清洁 ...

  8. 文件输入输出函数fgetc/fputc及fgets/fputs等文件指针位置的变化

    文件打开后才可以对文件进行操作.也就是说,文件必须经历打开-操作-关闭的过程.如前所述,C语言对文件的操作都是通过调用标准I/O库函数来实现的.文件操作实际是指对文件的读写.文件的读操作就是从文件中读 ...

  9. python——函数的形参和实参、参数

    python的参数分类 python参数可以分为两类:1.定义时的参数--形参(形式参数).2.调用时的参数--实参(实际参数,传参) 实参的规则 实参就是在函数调用的时候,通过函数后面的括号传递给函 ...

  10. HTTPS加密流程理解

    HTTPS加密流程 由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击 HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TC ...