Nacos
安装部署
下载对应的压缩包并解压:
启动:
新版本默认是集群启动
单机启动
startup.cmd -m standalone
访问地址:
http://localhost:8848/nacos
账号密码默认都是nacos
注册中心-环境搭建
默认配置
pom:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
yml:
server:
# 端口
port: 3011
spring:
application:
name: Alibaba-provider-student
cloud:
nacos:
# nacos 总地址(包括注册中心和配置中心地址)
server-addr: 127.0.0.1:8848
启动类注解:
@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class AlibabaProviderStudentApplication {
public static void main(String[] args) {
SpringApplication.run(AlibabaProviderStudentApplication.class,args);
}
}
集群支持
集群的调用默认还是轮询
Nacos扩展了服务分级存储的机制,修改配置才能生效
优先调用同一个集群中的服务(默认是随机),当前集群中的服务都不可用才会调用其它集群的服务。
yml:
server:
# 端口
port: 3021
spring:
application:
name: Alibaba-consumer-student
cloud:
nacos:
# nacos 总地址
server-addr: 127.0.0.1:8848
discovery:
cluster-name: cd
# 使用系统生成的ID
namespace: 3a360664-e1c7-4d31-8c81-9331cfbe224b
group: TEST_GROUP
##修改指定服务的负载均衡策略 【优先调用同一集群的实例,基于随机&权重】
Alibaba-provider-student:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
可以指定服务的调用权重: 0-1 控制调用的权重比例
环境隔离
同一个namespace下的同一个group才能互相调用!
同一个Nacos可以部署不同微服务项目
namespace1(一个微服务项目,10个子模块)
gruop1:开放
gruop2:测试
gruop3:线下
namespace2(一个微服务项目,20个子模块)
修改默认集群名:
同一个集群下调用的效率高
server:
# 端口
port: 3011
spring:
application:
name: Alibaba-provider-student
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
# 修改集群名
cluster-name: cd
修改命名空间:
server:
# 端口
port: 3011
spring:
application:
name: Alibaba-provider-student
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: cd
# 使用系统生成的ID
namespace: 3a360664-e1c7-4d31-8c81-9331cfbe224b
修改组名:
server:
# 端口
port: 3011
spring:
application:
name: Alibaba-provider-student
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: cd
# 使用系统生成的ID
namespace: 3a360664-e1c7-4d31-8c81-9331cfbe224b
# 修改默认组名
group: TEST_GROUP
配置中心-环境搭建
默认配置
pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
bootstrap.yml
配置中心和注册中心的地址都为:
server-addr: 127.0.0.1:8848
server:
# 端口
port: 3011
spring:
application:
name: Alibaba-provider-student
profiles:
active: dev
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: cd
# 使用系统生成的ID
namespace: 3a360664-e1c7-4d31-8c81-9331cfbe224b
group: TEST_GROUP
# 配置中心
config:
#配置中心文件后缀
file-extension: yaml
注解
@RefreshScope修改配置文件后自动刷新
@RefreshScope
@RestController
@RequestMapping("/student")
public class StudentController {
@Value("${server.port}")
private Integer port;
@Value("${mynacos}")
private String mynacos;
@GetMapping("/mynacos")
public RespEntity mynacos() {
return new RespEntity(200, "ok"+port, mynacos);
}
}
新建配置文件
Data ID命名规则及优先级:
p r e f i x − {prefix}- prefix−{spring.profiles.active}.${file-extension} > p r e f i x . {prefix}. prefix.{file-extension} > 本地配置
配置文件持久化
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
- 1.安装数据库,版本要求:5.6.5+
- 2.初始化mysql数据库,数据库初始化文件:mysql-schema.sql
- 3.修改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
db.user=nacos_devtest
db.password=youdontknow
再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql
环境隔离
server:
# 端口
port: 3011
spring:
application:
name: Alibaba-provider-student
profiles:
active: dev
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: cd
# 使用系统生成的ID
namespace: 3a360664-e1c7-4d31-8c81-9331cfbe224b
group: TEST_GROUP
config:
file-extension: yaml
# 组名
group: TEST_GROUP
# 命名空间
namespace: 3a360664-e1c7-4d31-8c81-9331cfbe224b
集群部署
启用集群配置文件,指定每个节点的IP地址和端口(conf->cluster.conf)
JVM参数,测试集群就使用单机版的参数 (bin->startup.cmd)