nacos 学习小结
Posted 小白逆袭之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nacos 学习小结相关的知识,希望对你有一定的参考价值。
下面主要讲述下,学习后的心得
CAP
C:数据一致性
A:可用性
P:分区容错性,(这个是分布式系统必须保证的)
Eureka 是AP,即Eureka 注重的是注册中心可用,即生产环境上,搭建好Eureka集群后,若某一个Eureka挂了,用户仍然可以可以继续请求,只是信息不同步。
Eureka 有自我保护机制:Eureka 服务端在一定时间内(90秒),没有接收到某个微服务实例的心跳,会注销该实例,当Eureka服务端在短时间内丢失过多(超过85%)客户端(如网络故障)会进入保护机制,不注销任何微服务,当恢复后才退出自我保护机制(一般自我保护机制不要关)
个人建议:还没学过Eureka的,直接跳过,直接学习Nacos,因为Eureka 停止更新了(停止更新是一件很可怕的事情,在项目集成进Eureka后,若项目因为某些原因需要将spring4升级到srping5,而Eureka源码若是使用spring4,此时要是发生冲突,要完成项目spring升级,就必须把eureka 升级到spring5,而eureka 又停止了更新,此时就会相当头疼)
zookeeper 是CP: 它注重数据一致性,在Zookeeper 集群里,若zookeeper 主节点 挂掉,虽然会重新进行选举,在选举的这段时间里,注册服务是瘫痪的,用户不能往注册中心注册服务
Nacos 是AP+CP:它集CAP功能于一体。功能在几款注册中心里面是最齐全的,它也有自带的可视化页面,而zookeeper 就没有自带,eureka也有自带
-
功能
zookeeper
eureka
nacos
Dubbo集成
支持
不支持
支持
Springcloud集成
支持
支持
支持
访问协议
TCP
HTTP
HTTP/DNS
CAP
CP
AP
CP+AP
K8S集成
不支持
不支持
支持
自动注销实例
支持
支持
支持
健康检查
Keep alive
Client beat
TCP/HTTP/Client beat/mysql
雪崩保护
无
有
有
监听支持
支持
支持
支持
跨数据中心同步
不支持
不支持
支持
多数据中心
不支持
支持
支持
6. Nacos 功能
如图所示:
public,company 那些是命名空间,彼此之间是相互隔离,互不影响的,所以在本地环境,团队可以每个人一个命令空间,集中控制,而又无相互影响。
nacos 作为配置中心,导入导出文件非常容易,易于管理
7.1. pom文件
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
7.2. 在bootstrap.yml 文件配置
spring:
application:
name: springcloud-dept
cloud:
nacos:
config:
#nacos.top.com:80 是本地的,内含nacos集群
server-addr: nacos.top.com:80
namespace: 236b9804-b53a-4bcf-92c3-451fbbdba073
group: develop
file-extension: yaml
prefix: ${spring.application.name}
extension-configs[0]:
dataId: discovery_nacos.yaml
group: develop
refresh: true
extension-configs[1]:
dataId: mybatis.yaml
group: develop
refresh: true
extension-configs[2]:
dataId: jdbc.yaml
group: develop
refresh: true
extension-configs[3]:
dataId: test.yaml
group: develop
refresh: true
配置在bootstrap.yml 是因为这个是应用级配置,在springboot里面,bootstrap文件会最先加载,然后才加载application 文件;
username:是nacos的用户名
password:是nacos的密码
用户名和密码无需配置也能使用(实践出来的)
server-addr:是nacos的ip+端口
namespace:是nacos的命名空间
Group:所加载配置文件所在的组
file-extension:文件格式
spring.application.name ,它是构成 Nacos 配置管理 dataId字段的一部分。
extension-configs: 是使用springCloud加载多个配置文件的设置
dataId 的完整格式如下
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置
spring.profiles.active 即为当前环境对应的 profile, 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
3. 引用赋值:
@RefreshScope
public class StudyProvideController {
@Value("${provider.timeout:22222}")
private String testNacos;
}
使用上和springboot 是一样的,如果需要实时刷新,就需要在使用的类上面加上注解 @RefreshScope
4. 使用过程中的注意事项(问题截止于2.0.2版本)
(1)nacos 作为配置中心和注册中心, username和 password 不需要配置也能正常使用
(2)nacos配置中心和注册中心,要写为nacos集群时需要怎么写
server-addr: nacos.top.com:80
nacos.top.com 后面需要紧跟80 端口,不然会被默认拼接上8848 端口,然后就会报错
而nacos.top.com 这个域名,会经过nginx,通过负载均衡,映射到nacos集群,这样nacos即使挂了一个,nacos也能正常使用。
8. 作为注册中心与springCloud 集成
<!--springclould-引入nacos作为注册中心,注意版本号-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-starter-alibaba-nacos.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--nacos 客户端-->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.client.springcloud.version}</version>
</dependency>
discovery_nacos.yaml 文件配置
即
spring:
cloud:
nacos:
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
discovery:
username: nacos
password: nacos
server-addr: nacos.top.com:80namespace: 236b9804-b53a-4bcf-92c3-451fbbdba073
springCloud 消费者和提供者的注册中心都是这样配置的
9. Nacos-Docker 安装
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
安装集群版,用nginx 作负载均衡,将域名nginx.top.com 转到nacos
集群 上 ;nacos 的安装前提是具备一定的docker 基础,
熟悉docker-compose。
这里有2点提醒:
1. cluster-hostname.yaml 集群版是使用这个文件创建,如果需要更改mysql 端口号,更改
里面的ports 属性,如下(其它地方的端口号不要更改)
mysql:
container_name: mysql
image: nacos/nacos-mysql:5.7
env_file:
- ../env/mysql.env
volumes:
- ./mysql:/var/lib/mysql
ports:
- "3308:3306"
2.若要更改nacos 平台登录用户的密码,只需创建成功后,在平台里面
更改,若要更改nacos 所用数据库的账号密码,则需要调整
nacos-docker/env 目录下 的mysql.env
nacos-hostname.env
nacos-ip.env
以上是关于nacos 学习小结的主要内容,如果未能解决你的问题,请参考以下文章