我觉得 Nacos 用起来还不错
在使用 SpringCloud 做分布式微服务架构时, 注册中心是必不可少的一个组件. 目前可以用的主要有: Eureka,Consul,Zookeeper. 今天, 我们就来说一下 Alibaba 的 Nacos 怎么样?
下载与安装
下载地址 https://github.com/alibaba/nacos/releases
安装:
Windows 下载解压后(.zip), 直接点击 bin/start.bat 就可以了.
Linux 下载解压后(.tar.gz), 同样, 也是运行 bin/start.sh 脚本.
打开控制台:
Nacos 提供了一个可视化的操作平台, 安装好之后, 在浏览器中输入 http://localhost:8848 就可以访问了, 默认的用户名和密码都是 nacos(我使用的 1.2.0 版本. 默认将密码验证给关了, 这个选项后边会说)
Nacos 简介
Nacos 是由阿里巴巴开源的一个好东西, 直接贴上它的官网, 就不再这么累赘了, 毕竟是国人开发的, 是有中文文档的, 上边写的很全面. https://nacos.io/zh-cn/docs/quick-start.html
Nacos 作为注册中心
它和 Eureka 不一样, 并不需要创建新的 web 项目, 而是和 Zookeeper 和 Consul 一样, 只需要下载安装启动后, 将我们的微服务注册进去就可以了.
创建两个微服务, 一个客户端 (调用者) 和一个服务端(提供者),
引入依赖
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
在它们的配置文件中引入如下代码:
- spring:
- cloud:
- nacos:
- discovery:
- # Nacos 的地址
- server-addr: localhost:8848
主启动类上添加(不管是哪种注册中心, 这个一定要有):
@EnableDiscoveryClient
当然, 在客户端还是要添加 ribbon 的负载均衡的, 但是不用额外添加依赖, nacos 已经添加了
- @Configuration
- public class AppConfig {
- @Bean
- @LoadBalanced
- public RestTemplate restTemplate(){
- return new RestTemplate();
- }
- }
好了, 打开 Nacos 的控制台, 然后就可以看到这两个微服务了.
Nacos 作为分布式配置中心
之前我们是使用 SpringCloudConfig 从 GitHub 等仓库上拉取的配置文件, 但是用了 Nacos 后, 我们就可以从 Nacos 中直接配置了, 是不是很方便啊. 新建了一个项目, nacos-config-server-8002
pom.xml 引入下边依赖
- <!-- 分布式配置中心 -->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
- </dependency>
application.YAML 中加入如下配置内容
- spring:
- profiles:
- active: dev
添加一个 Bootstrap.YAML
- server:
- port: 8002
- spring:
- application:
- name: nacos-config-server-8002
- cloud:
- nacos:
- discovery:
- server-addr: localhost:8848
- config:
- server-addr: localhost:8848
- # 配置文件类型, 有 YAML 和 properties , 注意一定是 YAML, 不是 YAML
- file-extension: YAML
application.YAML 中的配置是什么意思?
为什么要引入 Bootstrap.YAML?
简单来说, 这个配置是和 application.YAML 是一样的, 不这它要比 appliation.YAML 先加载
Controller 中的接口
- @RestController
- @RefreshScope // 这是一个 SpingCloud 的原生注解, 可以实现配置的动态刷新
- public class InfoController {
- /*
- 这个中的 : 的意思就是说, 如果配置文件中没有, 就直接使用后边的那个字符串, 我写的是 nothing
- 在本地项目中, 我们并没有配置 configInfo,
- 所以如果这时候调用 http://localhost:8002/info
- 返回就是 nothing
- */
- @Value("${configInfo}")
- private String configInfo;
- /**
- * 用做配置中心的演示
- *
- * @return
- */
- @GetMapping("info")
- public String getConfig() {
- return configInfo;
- }
- }
Nacos 中的几个空间概念:
NameSpaces(命名空间)
相当于我们一个项目中的包名, Nacos 中可以新建多个命名空间. 微服务注册的时候, 可以通过配置 spring.cloud.nacos.discovery.namespace, 当然, 配置文件也可以配置 namespace 来指定对应的名称空间, 如果不配置就是使用默认的 public 空间.
假如, 你是好几个项目共用一个 Nacos 集群, 就可以通过 namespce 来区分项目.
在 Nacos 的控制台的最下边有一个命名空间, 你可以新建一个试, 建完再次点击服务列表和配置列表上边会出现你的命令空间选择(如下图, 我新建了一个 space1 的空间, public 是默认的)
Group(分组)
相当于 Java 中的类名, 同样, 一个包下可以有多个类. 不过这个只是相对于配置文件来说, 对于服务注册没有这么一说. 它有一个默认的分组就是 DEFAULT_GROUP, 在新建配置文件时就会有(如下图)
DataID
这个就相当于类中的方法, 同样, 一个类中就会有多个方法名.
我们的配置文件就是在上图中去添加的, 下边是我截取了 Nacos 官方文档中对于 DataID 的说明:
新建一个配置文件试试
在配置列表中新建一个配置文件, 如果你有多个命名空间, 注意选择你的项目中连接的那个
只要点了右下角的发布, 就会自动配置了, 再次访问 http://localhost:8002/info, 就会看到已经更改了, 这个是实时更改的.
这些都是很简单的操作, 只要你自己做一次, 就一定会使用了
Nacos 的配置文件持久化
Nacos 使用的是嵌入式数据库 Derby, 有关嵌入式数据库, 可以参考在 Spring 中使用嵌入式数据库 - H2, 虽然数据库不同, 但是原理操作方法一致. 但是, 我们想换成我们的 MySQL 用来存储 nacos 的数据, 可否?
导入数据到你本地的 MySQL 库
在 Nacos 安装包下的 conf 目录下有个 nacos-MySQL.sql 文件, 放到你的 MySQL 工具中执行一遍(它这个 sql 语句中建库, 先建个库名叫 nacos_config)
修改 conf 下的 application.properties 文件
- ### 98 行左右, 这个设置为 true 就是开启 nacos 启动的登录验证, 默认用户名和密码就是 nacos
- nacos.core.auth.enabled=true
- ### 在最后添加如下:
- spring.datasource.platform=MySQL
- db.num=1
- db.url.0=jdbc:MySQL://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
- db.user=root
- db.password=123
以上这些内容全都来自于 Nacos 官网
这样, 再次启动后 Nacos 后, 你之前的配置文件就全都不见了, 因为你配置了 MySQL 库. 这样, 你每次修改后, 就会进 MySQL 库, 这个库很简单的, 你大概看一下就能明白了.
微信关注 "小鱼与 Java", 回复 "SpingCloud" 获取更多 SpringCloud 学习资料
来源: https://www.cnblogs.com/Lyn4ever/p/12563434.html