文章目录
- 简介
- 一、安装Nacos服务端( Nacos Server)
- 二、将应用向Nacos服务端注册(注册功能)
- 三、Nacos配置中心
- 四、Nacos集群搭建
- 官方文档
- Nacos官方文档:[https://nacos.io/zh-cn/docs/quick-start.html](https://nacos.io/zh-cn/docs/quick-start.html)
- Nacos服务注册与发现(Nacos Discovery Example):[https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md](https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md)
- 应用的配置管理(Nacos Config Example):[https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md](https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md)
简介
动态服务发现、配置和服务管理平台,其主要功能如下:
- 服务发现和服务健康监测
- 动态配置服务
- 动态 DNS 服务
- 服务及其元数据管理
一、安装Nacos服务端( Nacos Server)
- 访问:https://github.com/alibaba/nacos/tags下载所需要的Nacos服务端
- 如果是本地开发,使用单机模式:修改”bin“文件夹下的“startup.cmd(linux下后缀为.sh)” ,将 set MODE=“cluster” 修改为 set MODE=“standalone”,之后双击启动即可
- 浏览器打开 IP:8848(端口默认为8848),登录,默认账号密码统一为 nacos
二、将应用向Nacos服务端注册(注册功能)
1. 引入依赖
代码如下(示例):
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2. 配置并查看:
- 在应用的"bootstrap.yml"配置文件中配置 Nacos Server 地址
spring:
application:
name: servicename
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #服务端的地址
- 在启动类添加注解
@EnableDiscoveryClient 此注解开启注册功能
@EnableDiscoveryClient //添加的注解
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 进入Nacos查看服务是否注册成功
3.命名空间,组,集群
命名空间(namespace)
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,可以用来做最外层隔离
组(Group)
组在命名空间下
集群
discovery:cluster-name 集群配置名称
三、Nacos配置中心
配置获取流程
- 项目启动
- 读取本地配置文件(bootstrap.yml)
- 读取Nacos中的配置文件
- 读取本地配置文件(application.yml)
- 创建Spring容器
- 加载bean
1. 引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. 配置
- 在服务创建文件"bootstrap.yml"配置文件,配置 Nacos Server 地址
spring:
cloud:
nacos:
config:
namespace: 4a759a7b-ca5c-48aa-be24-50c1c7265a24 #命名空间ID
file-extension: yml #配置项后缀
ext-config:
- dataId: service.yml #配置名称
refresh: true #开启自动刷新配置
server-addr: 127.0.0.1:8848 #配置中心服务器地址(就是Nacos服务端地址,但是配置中心和注册中心的地址是分开的)
3. 完成上述步骤后,应用会从配置中心获取相应的配置,并添加在 Spring Environment 的 PropertySources 中。
- 打开Nacos管理页面,进入配置管理添加一个配置项,配置名称 “service.yml”,配置格式选为YAML,并在其中写入配置项。(注意:注意格式缩进)
user:
name: jack
age: 18
- 之后在应用中使用 @Value 注解来将对应的配置注入到 SampleController 的 userName 和 age 字段,并添加 @RefreshScope 打开动态刷新功能,之后可以在方法中引用,配置中心动态的修改值,查看是否会动态刷新。
@RefreshScope
class SampleController {
@Value("${user.name}")
String userName;
@Value("${user.age}")
int age;
}
- @ConfigurationProperties() 注解
prefix:参数的配置前缀
可以将配置文件映射到对应的类上,并且自动开启动态刷新
4.配置文件优先级
环境配置->共享配置->本地配置
四、Nacos集群搭建
集群结构图
1. 搭建数据库,初始化数据库表结构
Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。官方推荐的最佳实践是使用带有主从的高可用数据库集群,这里我们以单点的数据库为例来讲解。
2.下载nacos安装包
nacos在GitHub上有下载地址:https://github.com/alibaba/nacos/tags,可以选择任意版本下载。
3.配置nacos
- 目录说明:
bin:启动脚本
conf:配置文件 - 进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
然后添加内容:(这里与你Nacos集群端口相同)
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847
- 然后修改application.properties文件,添加数据库配置
spring.datasource.platform=mysql
db.num=1 #数据库集群的数量
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123
4.启动nacos集群
- 将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3
- 然后分别修改三个文件夹中的application.properties.
nacos1:
server.port=8845
nacos3:
server.port=8846
nacos2:
server.port=8847
- 然后分别启动三个nacos节点:
startup.cmd
5. nginx反向代理
- 下载nginx安装包
解压到任意非中文目录下,修改conf/nginx.conf文件,配置如下:
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
而后在浏览器访问:http://localhost/nacos即可。
代码中application.yml文件配置如下:
spring:
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
- 优化
- 实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.
- Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离