SpringCloud Alibaba Nacos 服务注册和配置中心
文章目录
- SpringCloud Alibaba Nacos 服务注册和配置中心
-
- Nacos简介
- 安装并运行Nacos
- Nacos作为服务注册中心演示
-
- 官方文档
- 基于Nacos的服务提供者
- 基于Nacos的服务消费者
- 服务注册中心对比
- Nacos作为服务配置中心演示
-
- Nacos作为配置中心-基础配置
- Nacos作为配置中心-分类配置
- Nacos集群和持久化配置
-
- 单机模式支持mysql
- Nacos持久化配置解释
- Linux版Nacos+MySql生产环境配置
Nacos简介
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos就是 注册中心+配置中心 的组合
文章图片
安装并运行Nacos
- 官网下载Nacos :
home (nacos.io)
- 解压安装包,直接运行bin目录下的 startup.cmd
- 命令运行成功后直接访问 http://localhost:8848/nacos
默认的账号密码都是nacos
文章图片
Spring Cloud Alibaba Reference Documentation (spring-cloud-alibaba-group.github.io)
基于Nacos的服务提供者
- 新建Module cloudAlibaba-provider-payment9001
- pom
父pom:
com.alibaba.cloud spring-cloud-alibaba-dependencies2021.1 pom import
本地pom:
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
- yml:
server: port: 9001spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848#配置Nacos地址management: endpoints: web: exposure: include: *#暴露出需要监控的端点
- 主启动类:
在主启动类上添加注解:@EnableDiscoveryClient
- 业务类:
@RestController public class PaymentController {@Value("${server.port}") private String serverPort; @RequestMapping("/pay/nacos/{id}") public String getServerPort(@PathVariable("id") Integer id){ return "nacos registry,serverPort: "+serverPort+"\t"+"id: "+id; } }
- 测试
启动nacos服务注册中心、服务提供者9001
可以在nacos后台看到微服务信息:
文章图片
访问 http://localhost:9001/pay/nacos/1
文章图片
- 新建Module: cloudAlibaba-consumer-nacos-order83
- 模仿 provider9001 创建 provider9002
- pom:
org.springframework.cloud spring-cloud-starter-netflix-ribbon2.2.10.RELEASE com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
- yml:
server: port: 83spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848#配置Nacos地址#消费者将要访问的微服务名称 service-url: nacos-user-service: http://nacos-payment-provider
- 主启动类:
添加注解:@EnableDiscoveryClient
- 配置类:
@Configuration public class ApplicationContextConfig {@Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
- 业务类:
@RestController public class OrderController {@Autowired private RestTemplate restTemplate; /** * 读取配置文件中的信息,方便快捷 */ @Value("${service-url.nacos-user-service}") private String serviceUrl; @RequestMapping("/consumer/nacos/{id}") public String getServerPort(@PathVariable("id") Integer id){ return restTemplate.getForObject(serviceUrl+"/pay/nacos/"+id,String.class); } }
- 测试:
启动nacos控制台、provoder9001,9002、consumer83
访问:http://localhost:83/consumer/nacos/1
各种注册中心对比:
文章图片
- Nacos全景图所示:
- Nacos和 CAP:
Nacos自动支持 AP 和 CP 的切换
文章图片
- 切换:
文章图片
- 新建Module cloudAlibaba-config-nacos-client3377
- pom:
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-configcom.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
- yml:
yml配置文件需要配置两个,原因:
文章图片
全局配置文件 bootstrap.yml:
server: port: 3377spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848#Nacos作为服务注册中心 config: server-addr: localhost:8848#Nacos作为服务配置中心 file-extension: yaml#指定从配置中心中读取yaml格式的配置
单模块配置文件 application.yml:
spring: profiles: active: dev#表示开发环境
- 主启动类:
添加注解:@EnableDiscoveryClient
- 业务类:
@RestController @RefreshScope//支持Nacos的动态刷新功能 public class ConfigClientController {@Value("${config.info}") private String configInfo; @RequestMapping("/config/info") public String getConfigInfo(){ return configInfo; } }
- 在Nacos中添加配置信息:
Nacos中的配置规则:
- 理论:
Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则
官网地址:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
文章图片
文章图片
- 实操:
配置列表选择 新建配置:
文章图片
- 理论:
- 【Spring|SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解】测试:
运行cloud-config-nacos-client3377的主启动类
调用接口查看配置信息:http://localhost:3377/config/info
自带动态刷新
文章图片
- 分布式开发当中的问题:
多环境多项目管理
文章图片
- Nacos的图形化管理界面:
配置管理:
文章图片
命名空间:
文章图片
- NameSpace + Group + Data ID三者关系,设计原因:
文章图片
文章图片
- 三种方式加载配置:
- dataId方案
指定spring.profile.active和配置文件的dataId来使不同环境下读取不同配置
新建dev配置dataId,新建test配置dataId
文章图片
修改application.yml配置:
spring: profiles: active: info#表示开发环境 配置是什么就加载什么
测试:
文章图片
- group方案
通过group实现环境区分
在配置时修改group:
文章图片
并修改bootstrap.yml:
spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848#Nacos作为服务注册中心 config: server-addr: localhost:8848#Nacos作为服务配置中心 file-extension: yaml#指定从配置中心中读取yaml格式的配置 group: DEV_GROUP#配置group
修改application.yml:
spring: profiles: active: info#表示开发环境 配置是什么就加载什么
- namespace方案
新建dev/test的namespace
文章图片
配置列表在 名称空间dev下选择新建:
文章图片
文章图片
文章图片
复制命名空间id,配置bootstrap.yml:
cloud: nacos: discovery: server-addr: localhost:8848#Nacos作为服务注册中心 config: server-addr: localhost:8848#Nacos作为服务配置中心 file-extension: yaml#指定从配置中心中读取yaml格式的配置 group: DEV_GROUP#配置group namespace: 5b458e8e-fc75-46a9-b9c9-41644e8119ee#命名空间id
- dataId方案
架构图:
文章图片
文章图片
默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySql的存储单机模式支持mysql
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
- 1.安装数据库,版本要求:5.6.5+
- 2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
- 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysqldb.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
Nacos持久化配置解释
Nacos默认自带的是嵌入式数据库derby
derby到mysql切换配置步骤:
- 打开nacos安装文件目录
- \nacos\conf 目录下找到sql脚本 nacos-mysql.sql , 执行脚本
- \nacos\conf 目录下找到application.properties
修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysqldb.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=nacos_devtest#本机数据库用户名 db.password=youdontknow#本机数据库密码
再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql
预计需要,1个Nginx+3个nacos注册中心+1个mysql
Nacos下载Linux版,解压后安装
集群配置步骤:
- Linux服务器上mysql数据库配置
找到nacos-mysql.sql文件,粘贴到linux上的mysql数据库中
- 配置application.properties,与在windows上的配置相同
- Linux服务器上nacos的集群配置cluster.conf
梳理出三台nacos机器的不同服务端口号
复制出cluster.conf并修改,注意:这个ip不能写127.0.0.1,必须是Linux命令hostname -i能够识别的ip
文章图片
文章图片
- 编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端口
在/nacos/bin/目录下有startup.sh
文章图片
- 配置Nginx,由它作负载均衡
修改nginx的配置文件nginx.conf,并重新启动
文章图片
- 截至此处,配置了 1个nginx+3个nacos服务注册中心+1个mysql
测试通过nginx访问nacos:http://192.168.111.144:1111/nacos/#/login
新建一个配置测试,查看linux下的mysql是否成功插入了记录
微服务 cloudAlibaba-provider-payment9002启动注册进nacos集群
修改配置文件:
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 192.168.111.144:1111#换成nginx的1111端口,做集群
#server-addr: localhost:8848#配置nacos地址
启动9002,查看nacos后台界面,成功注册进入nacos:
文章图片
推荐阅读
- Spring|Spring Cloud Alibaba——Nacos进行多配置文件的加载
- 分布式微服务|Spring Cloud Alibaba Nacos服务注册与配置中心
- spring|Spring Cloud Alibaba——Nacos集群配置
- spring|Spring Cloud Alibaba——Nacos服务配置中心
- 算法|OpenCV部署yolov5v-v6.1目标检测(附源代码)
- java|多线程与并发编程
- java|第十六课(Android打包发布)
- #|Sql Server 解决“用户登录失败,错误编18456”
- Linux|Centos7上安装IPFS