一、介绍
Nacos:由单词Naming和Cofiguration的前两个字母组成,最后的s代表Service。
1,作用
- 替代Eureka做服务注册中心
- 替代Cloud Config做服务配置中心
2,地址
文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
下载:https://github.com/alibaba/nacos/tags
3,各注册中心比较
比较 | nacos | eureka | consul | zookeeper |
---|---|---|---|---|
一致性协议 | CP + AP 可切换 | AP | CP | CP |
健康检查 | TCP/HTTP/MySQL/Client Beat | Client Beat | TCP/HTTP/gRPC/CMD | Client Beat |
负载均衡 | 权重/DSL/metadata/CMDB | Ribbon | Fabio | 无 |
雪崩保护 | 支持 | 支持 | 不支持 | 不支持 |
自动注销实例 | 支持 | 支持 | 不支持 | 支持 |
访问协议 | HTTP/DNS/UDP | HTTP | HTTP/DNS | TCP |
监听支持 | 支持 | 支持 | 支持 | 支持 |
多数据中心 | 支持 | 支持 | 支持 | 不支持 |
跨注册中心 | 支持 | 不支持 | 支持 | 不支持 |
SpringColud集成 | 支持 | 支持 | 支持 | 不支持 |
Dubbo集成 | 支持 | 不支持 | 不支持 | 支持 |
kubernates集成 | 支持 | 不支持 | 支持 | 不支持 |
二、nacos安装
https://github.com/alibaba/nacos/releases/tag/1.1.4
1,单机版
a)上传并解压
tar -xvf nacos-server-1.1.4.tar.gz
b)将nacos/conf/nacos-mysql.sql导入到mysql的数据库中
c)在配置文件中添加数据库配置
vi nacos/conf/application.properties
#########在文末添加##################### spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://hadoop103:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456
d)启动nacos
nacos/bin/startup.sh -m standalone
2,集群版
a)下载解压上传,导入数据,修改application.properties(同上)
b)修改cluster.conf
#查看对应的主机 [root@hadoop103 nacos_cluster]# hostname -i 192.168.232.103 #配置集群 [root@hadoop103 nacos_cluster]# vi conf/cluster.conf 192.168.232.103:3333 192.168.232.103:4444 192.168.232.103:5555
c)修改startup.sh
vi bin/startup.sh
d)启动nacos
bin/startup.sh -p 3333 bin/startup.sh -p 4444 bin/startup.sh -p 5555
e)配置nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream cluster{ server 127.0.0.1:3333; server 127.0.0.1:4444; server 127.0.0.1:5555; } server { listen 1111; server_name localhost; location / { proxy_pass http://cluster; } } }
f)nginx启动
./sbin/nginx -c ./conf/nginx.conf #访问路径 http://hadoop103:1111/nacos
三、Nacos服务启动
1,Nacos基础示例
源码:cloudalibaba-provider-payment9001
pom文件
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
yaml文件
server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址 management: endpoints: web: exposure: include: '*'
application
@EnableDiscoveryClient @SpringBootApplication public class NacosPaymentMain9001 { public static void main(String[] args) { SpringApplication.run(NacosPaymentMain9001.class,args); } }
2,Nacos作为基础配置中心
源码:cloudalibaba-config-nacos-client3377
pom文件
<!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--nacos-discovery--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--web + actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
yaml文件
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格式的配置 profiles: active: dev #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId
applicaiton同上
controller
@RestController @RefreshScope //动态刷新引用值 public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo() { return configInfo; } }
nacos中新建配置文件nacos-config-client-dev.yaml
3,集群Nacos的示例
源码地址:cloudalibaba-config-nacos-cluster3388
与上一步(2)的配置基本一致
只有对应的yaml文件不同
server: port: 3388 spring: profiles: active: dev #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId application: name: nacos-config-cluster cloud: nacos: discovery: server-addr: hadoop103:1111 #服务注册中心地址 config: server-addr: hadoop103:1111 #配置中心地址 file-extension: yaml #指定yaml格式的配置
四、DataId,Group,NameSpace
源码地址:cloudalibaba-config-nacos-cluster3388
DataId:${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
Group:对应Group
NameSpace:对应命名空间id
server: port: 3388 spring: profiles: active: dev #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId application: name: nacos-config-cluster cloud: nacos: discovery: server-addr: hadoop103:1111 #服务注册中心地址 namespace: a35df75a-6d0e-4e28-9b89-b4d2d8dd87e6 #服务发现所属的命名空间 config: server-addr: hadoop103:1111 #配置中心地址 file-extension: yaml #指定yaml格式的配置 group: TEST_GROUP #对应group namespace: a35df75a-6d0e-4e28-9b89-b4d2d8dd87e6 #对应myns的命名空间的ID