SpringCloud Alibaba Nacos 服务注册与配置中心
SpringCloud Alibaba Nacos 服务注册与配置中心
- 1-SpringCloud Alibaba Nacos 概述
- 1.1-是什么
- 1.2-能干嘛
- 1.3-去哪下
- 1.4-怎么玩
- 2-SpringCloud Alibaba Nacos 安装
- 2.1-Nacos 下载
- 2.2-Nacos 安装
- 3-SpringCloud Alibaba Nacos 注册中心
- 3.1-提供者 cloudalibaba-provider-payment9001
- 3.2-消费者 cloudalibaba-consumer-nacos-order83
- 3.3-注册中心对比
- 4-SpringCloud Alibaba Nacos 配置中心
- 4.1-Nacos 基础配置
- 4.2-Nacos 分类配置
- 5-SpringCloud Alibaba Nacos 集群和持久化
- 5.1-持久化配置
- 5.2-持久化配置
1-SpringCloud Alibaba Nacos 概述
1.1-是什么
Nacos(Dynamic Naming And Configuration Service):Na、co 分别是 Naming、Configuration 的前两个字母,最后的 s 是 Service 的首字母。
一个更易于构建云原生应用的动态服务发现、配置管理、服务管理中心。
Nacos 就是注册中心 + 配置中心的组合。等价于:Nacos = Eureka + Config + Bus
1.2-能干嘛
-
服务注册中心代替 Eureka。
-
服务配置中心代替 Config。
1.3-去哪下
官网:
- https://nacos.io/zh-cn/index.html
GitHub:
- https://github.com/alibaba/Nacos
1.4-怎么玩
| 服务注册与发现框架 | CAP 模型 | 控制台管理 | 社区活跃度 |
|---|---|---|---|
| Eureka | AP | 支持 | 低 |
| Zookeeper | CP | 不支持 | 中 |
| Consul | CP | 支持 | 高 |
| Nacos | AP | 支持 | 高 |
2-SpringCloud Alibaba Nacos 安装

2.1-Nacos 下载
GitHub:
- https://github.com/alibaba/nacos/releases/tag/1.1.4
网盘:
- 链接:https://pan.baidu.com/s/1bVwYAtbZpT1MHJAVOaMKCg
- 提取码:1104
2.2-Nacos 安装
a、解压 Nacos 压缩包(nacos-server-1.1.4.zip)

b、运行 nacos/bin 目录下 startup.cmd

c、http://localhost:8848/nacos
默认账户、密码都是 nacos。

3-SpringCloud Alibaba Nacos 注册中心
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html
3.1-提供者 cloudalibaba-provider-payment9001
a、右击父工程 mscloud,新建子模块 cloudalibaba-provider-payment9001

b、修改父工程 mscloud 中 pom.xml
待处理–是否需要修改
c、修改子模块 cloudalibaba-provider-payment9001 中 pom.xml
4.0.0 cloud2020 com.atguigu.springcloud 1.0-SNAPSHOT cloudalibaba-provider-payment9001 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test com.alibaba fastjson 1.2.62
d、修改子模块 cloudalibaba-provider-payment9001,目录 /src/main/resources 中新建 application.yml
server:port: 9001spring:application:name: nacos-payment-providercloud:nacos:discovery:# Nacos 地址server-addr: localhost:8848management:endpoints:web:exposure:include: '*'
e、修改子模块 cloudalibaba-provider-payment9001,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba
f、修改子模块 cloudalibaba-provider-payment9001,包 com.atguigu.springcloud.alibaba 中新建启动类 PaymentMain9001.java
package com.atguigu.springcloud.alibaba;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {public static void main(String[] args) {SpringApplication.run(PaymentMain9001.class, args);}
}
g、修改子模块 cloudalibaba-provider-payment9001,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.controller
h、修改子模块 cloudalibaba-provider-payment9001,包 com.atguigu.springcloud.alibaba.controller 中新建 PaymentController.java
package com.atguigu.springcloud.alibaba.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class PaymentController {@Value("${server.port}")private String serverPort;@GetMapping(value = "/payment/nacos/{id}")public String getPayment(@PathVariable("id") Integer id) {return "nacos registry, serverPort: " + serverPort + "\t id" + id;}
}
i、测试子模块 cloudalibaba-provider-payment9001
- 启动子模块 cloudalibaba-provider-payment9001
- http://localhost:8848/nacos

- http://localhost:9001/payment/nacos/1

3.2-消费者 cloudalibaba-consumer-nacos-order83
a、右击父工程 mscloud,新建子模块 cloudalibaba-consumer-nacos-order83

b、修改子模块 cloudalibaba-consumer-nacos-order83 中 pom.xml
Why Nacos 支持负载均衡。

4.0.0 cloud2020 com.atguigu.springcloud 1.0-SNAPSHOT cloudalibaba-consumer-nacos-order83 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.atguigu.springcloud cloud-api-commons ${project.version} org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test
c、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/resources 中新建 application.yml
server:port: 83spring:application:name: nacos-order-consumercloud:nacos:discovery:server-addr: localhost:8848service-url:nacos-user-service: http://nacos-payment-provider
d、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba
e、修改子模块 cloudalibaba-consumer-nacos-order83,包 com.atguigu.springcloud.alibaba 中新建启动类 OrderNacosMain83.java
package com.atguigu.springcloud.alibaba;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83 {public static void main(String[] args) {SpringApplication.run(OrderNacosMain83.class, args);}
}
f、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.config
g、修改子模块 cloudalibaba-consumer-nacos-order83,包 com.atguigu.springcloud.alibaba.config 中新建 ApplicationContextConfig.java
package com.atguigu.springcloud.alibaba.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ApplicationContextConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}
h、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.controller
i、修改子模块 cloudalibaba-consumer-nacos-order83,包 com.atguigu.springcloud.alibaba.controller 中新建 OrderNacosController.java
package com.atguigu.springcloud.alibaba.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;@RestController
@Slf4j
public class OrderNacosController {@Resourceprivate 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);}
}
j、测试子模块 cloudalibaba-provider-payment9001
- 启动子模块 cloudalibaba-provider-payment9001
- 启动子模块 cloudalibaba-consumer-nacos-order83
- http://localhost:8848/nacos

- http://localhost:83/consumer/payment/nacos/13

3.3-注册中心对比
Nacos 全景图:

Nacos 和 CAP:


Nacos 支持 AP 和 CP 模式的切换:
C 是所有节点在同一时间看到的数据是一致的,而 A 是所有的请求都会收到响应。
如何选择模式?
- 如果不需要存储服务级别的信息且服务实例是通过 nacos-client 注册,并能够保持心跳上报,那么就可以选择 AP 模式。当前主流的服务如 SpingCloud 和 Dubbo 服务都适用于 AP 模式,AP 模式为了服务的可能性而减弱了一致性,因此 AP 模式下只支持注册临时实例。
- 如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S 服务和 DNS 服务则适用于 CP 模式。CP 模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
4-SpringCloud Alibaba Nacos 配置中心
4.1-Nacos 基础配置
a、右击父工程 mscloud,新建子模块 cloudalibaba-config-nacos-client3377

b、修改子模块 cloudalibaba-config-nacos-client3377 中 pom.xml
4.0.0 cloud2020 com.atguigu.springcloud 1.0-SNAPSHOT cloudalibaba-config-nacos-client3377 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test
c、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/resources 中新建 bootstrap.yml
Nacos 和 SpringCloud Config 一样,在项目初始化时保证先从配置中心进行配置拉取之后,才能保证项目的正常启动。SpringBoot 中配置文件的加载是存在优先级顺序的,bootstrap 优先级高于 application。
server:port: 3377spring:application:name: nacos-config-clientcloud:nacos:discovery:# 注册中心地址server-addr: localhost:8848config:# 配置中心地址server-addr: localhost:8848# yaml 格式的配置file-extension: yaml
d、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/resources 中新建 application.yml
spring:profiles:active: dev
e、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba
f、修改子模块 cloudalibaba-config-nacos-client3377,包 com.atguigu.springcloud.alibaba 中新建启动类 NacosConfigClientMain3377.java
package com.atguigu.springcloud.alibaba;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {public static void main(String[] args) {SpringApplication.run(NacosConfigClientMain3377.class, args);}
}
g、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.controller
h、修改子模块 cloudalibaba-config-nacos-client3377,包 com.atguigu.springcloud.alibaba.controller 中新建 ConfigClientController.java
通过 SpringCloud 原生注解 @RefreshScope 实现配置自动更新。
package com.atguigu.springcloud.alibaba.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope
public class ConfigClientController {@Value("${config.info}")private String configInfo;@GetMapping("/config/info")public String getConfigInfo() {return configInfo;}
}
i、Nacos 中添加配置信息
Nacos 的匹配规则:
-
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
Nacos 中 DataId 的组成格式与 SpringBoot 配置文件中的匹配规则:

${spring.application.name}-${spring.profiles.active}.$(spring.cloud.nacos.config.file-extension
Nacos 配置新增:


DataId 设置:
# prefix:默认 spring.application.name
# spring.profile.active:当前环境对应的 profile,可以通过 spring.profile.active 配置
# file-exetension:配置内容的数据格式,可以通过 spring.cloud.nacos.config.file-extension 配置
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

j、测试 Nacos 基础配置
- List item
- 启动子模块 cloudalibaba-config-nacos-client3377
- http://localhost:3377/config/info
历史配置
测试
启动前需要在nacos客户端-配置管理-配置管理栏目下有没有对应的yaml配置文件
运行cloud-config-nacos-client3377的主启动类
调用接口查看配置信息
http://localhost:3377/config/info
自带动态刷新
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新
4.2-Nacos 分类配置
Nacos作为配置中心-分类配置问题多环境多项目管理Nacos的图形化管理界面配置管理命名空间Namespace+Group+Data ID三者关系?为什么这么设计?CaseDataID方案指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置默认空间+默认分组+新建dev和test两个DataID新建dev配置DataID新建test配置DataID通过spring.profile.active属性就能进行多环境下配置文件的读取测试http://localhost:3377/config/info配置是什么就加载什么testGroup方案通过Group实现环境区分新建Group在nacos图形界面控制台上面新建配置文件DataIDbootstrap+application在config下增加一条group的配置即可。可配置为DEV_GROUP或TEST_GROUPNamespace方案新建dev/test的Namespace回到服务管理-服务列表查看按照域名配置填写YMLbootstrapapplication
5-SpringCloud Alibaba Nacos 集群和持久化
Nacos集群和持久化配置(重要)
官网说明
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
官网架构图(写的(┬_┬))
上图官网翻译,真实情况
说明
按照上述,我们需要mysql数据库
官网说明
https://nacos.io/zh-cn/docs/deployment.html
重点说明
5.1-持久化配置
Nacos持久化配置解释Nacos默认自带的是嵌入式数据库derbyhttps://github.com/alibaba/nacos/blob/develop/config/pom.xmlderby到mysql切换配置步骤nacos-server-1.1.4\nacos\conf目录下找到sql脚本nacos-mysql.sql执行脚本nacos-server-1.1.4\nacos\conf目录下找到application.properties启动nacos,可以看到是个全新的空记录界面,以前是记录进derby
5.2-持久化配置
Linux版Nacos+MySQL生产环境配置预计需要,1个nginx+3个nacos注册中心+1个mysqlNacos下载linux版本https://github.com/alibaba/nacos/releases/tag/1.1.4nacos-server-1.1.4.tar.gz解压后安装集群配置步骤(重点)1.Linux服务器上mysql数据库配置SQL脚本在哪里sql语句源文件nacos-mysql.sql自己Linux机器上的Mysql数据库黏贴执行后结果2.application.properties配置位置内容3.Linux服务器上nacos的集群配置cluster.conf梳理出3台nacos机器的不同服务端口号复制出cluster.conf内容这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP4.编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端/mynacos/nacos/bin目录下有startup.sh在什么地方,修改什么,怎么修改思考修改内容执行方式5.Nginx的配置,由它作为负载均衡器修改nginx的配置文件nginx.conf按照指定启动6.截止到此处,1个Nginx+3个nacos注册中心+1个mysql测试通过nginx访问nacoshttps://写你自己虚拟机的ip:1111/nacos/#/login新建一个配置测试linux服务器的mysql插入一条记录测试微服务cloudalibaba-provider-payment9002启动注册进nacos集群yml结果高可用小总结
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
