简介
什么是 Nacos
Dynamic Naming and Configuration Service 动态命名和配置服务 Nacos = Eureka+Config+Bus 注册中心与配置中心的组合
能干什么
- 替代Eureka做注册中心
- 替代Config做配置中心
下载
官网
安装
- 本案例采用 1.1.4
- github.com/alibaba/nac… tar.gz是linux,zip是windows
- 解压 cmd 进入 bin目录下
- startup.cmd 启动程序
- 进入 http://localhost:8848/nacos
- 默认账号密码都是 nacos
作为服务注册中心
服务提供者模块
- cloud-ali-provider-payment9001
- 父 pom
<dependencyManagement>
<dependencies>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 子 pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
management:
endpoints:
web:
exposure:
include: '*' #暴露端口
- 测试 http://localhost:9001/payment/nacos/1 进入nocas查看是否配置成功
- 参照9001新建9002
消费者模块
Nacos自带Ribbon实现负载均衡,Nacos支持AP与CP的切换
- 新建消费者模块
- pom 同 9001 一样
- yml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
server-addr: localhost:8848
# 消费者要去访问的微服务名称
service-url:
nacos-user-service: http://nacos-payment-provider
- 主启动类 同 9001 一样
- config类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- controller
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value(("${service-url.nacos-user-service}"))
private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id){
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
作为配置中心
配置
- 建模块cloud-ali-config-nacos-client3377
- pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- yml:有application与bootstrap application
spring:
profiles:
active: dev # 表示开发环境
bootstrap
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 服务注册中心
config:
server-addr: localhost:8848 # 服务注册中心
file-extension: yaml # 指定yaml格式的配置
- 主启动
@SpringBootApplication
@EnableDiscoveryClient
- controller
@RestController
@RefreshScope // 动态刷新
public class ConfigClientController {
@Value("/config.info")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}
-
配置dataid
${prefix}-${spring.profile.active}.${file-extension}- prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
- spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成
- file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
- 得到 data id为
${prefix}-${spring.profile.active}.${file-extension}
${spring-application-name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
- 配置 yaml 文件
- 测试访问http://localhost:3377/config/info看是否得到配置信息
- 更改nacos中内容查看3377中是否变化
分组
- Nacos默认的命名空间是 public ,Namespace主要实现隔离。 比如说现在有三个环境:开发,测试,生产环境,就可以创建三个Namespace,不同的Namespace之间是隔离的。
- Group默认是 DEFAULT_GROUP,Group 可以把不同的微服务划分到一个组里去。
- service就是微服务,一个微服务可以包含多个 Cluster (集群)
- Instance就是微服务的实例
三种方案加载配置
DataID
指定 spring.profile.active 与配置文件的DataID来使不同环境下读取不同的配置 默认空难攻坚+默认分组+新建dev和test两个DataID
- Nacos配置中心新建nacos-config-client-test.yaml
- 将spring中的配置spring.profile.active改成test,就会加载Nacos中新建的yaml
Group
- Nacos中新建配置 nacos-config-client-info.yaml ,分组为 DEV_GROUP
- Nacos中新建配置 nacos-config-client-info.yaml ,分组为 TEST_GROUP
- 将 spring.profile.active改成 info
- 增加配置 spring.cloud.nacos.config.group 指定组名,选择调用哪个组的文件
- 测试:http://localhost:3377/config/info
Namespace
- 找到左侧命名空间,新建test与dev命名空间
- dev 命名空间新建 nacos-config-client-dev.yaml 分组为 DEV_GROUP
- yml文件
spring:
application:
name: nacos-config-client
cloud:
nacos:
config:
# 这个为命名空间的流水号
namespace: 625e1f16-7820-412f-84d0-890d0092577a
group: DEV_GROUP
总结
如同包一样 Namespace>Group>DataID
Nacos集群与持久化配置(重要)
解决问题
- 如果Nacos挂掉怎么办
- Nacos停机了,但是有些数据仍需要保留
持久化配置
Nacos支持三种部署模式
- 单机模式
- 集群模式-用于生产环境
- 多集群模式-用于多数据中心场景 默认Nacos使用嵌入式数据库derby来实现数据的存储。但是如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。
环境准备
- 64 bit OS Linux/Unix/Mac,推荐使用Linux系统。
- 64 bit JDK 1.8+;下载.配置。
- Maven 3.2.x+;下载.配置。
- 3个或3个以上Nacos节点才能构成集群。
切换数据库
- 安装数据库,版本要求:5.6.5+
- 初始化mysql数据库,数据库初始化文件:nacos\conf\nacos-mysql.sql
- 修改nacos\conf\application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true # 更改数据库名,更改127.0.0.1
db.user=nacos_devtest #更改用户名
db.password=youdontknow #更改密码
- 重启Nacos
- 观察到之前写过的配置全部消失,因为切换了数据库
集群
前提配置
1个Nginx+3个nacos注册中心+1个mysql
下载linux版
- 下载:github.com/alibaba/nac…
- 解压
- 同windows一样,需要在linux下设置mysql为nacos持久化存储
linux安装mysql
- 下载:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz - 将安装包放到指定目录下,解压tar xzvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
- 移动到 /usr/local目录下 blog.csdn.net/dc282614966…
创建 nacos 数据库
- source /usr/local/nacos/conf/nacos-mysql.sql
- 修改nacos\conf\application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true # 更改数据库名,更改127.0.0.1
db.user=nacos_devtest #更改用户名
db.password=youdontknow #更改密码
集群配置
- 复制nacos/config下的 cluster.config.example 重命名为 cluster.config
- 修改文件内容,ip地址查看 id addr
192.168.150.66:3333
192.168.150.66:4444
192.168.150.66:5555
- 配置 bin 下的 startup.sh,109集
- 安装Nginx blog.csdn.net/t8116189520… 命令: cd /usr/local/nginx/sbin
启动,关闭,重启,命令:
./nginx 启动
./nginx -s stop 关闭
./nginx -s reload 重启
- 配置nginx www.cnblogs.com/linchenguan…
- 注意
- 关闭防火墙
- 打开mysql服务
- 有错误要去nacos的log文件夹内查询
- 不要将安装包在windows下载后直接拖到linux
- 测试 将idea对应端口换成 nginx 地址即可:192.168.150.66:1111