https://blog.csdn.net/m0_56069948/article/details/122285951
https://blog.csdn.net/m0_56069948/article/details/122285941
Nacos GitHub源码地址 https://github.com/alibaba/nacos ,目前源码基于高性能RPC的2.1.0,和基于HTTP RESTFUL的1.4.3版本的两条分支,因此2.X系列Nacos性能比1.X版本至少提升2倍以上,我们这边下载研究的是2.1.0版本的源码。
Nacos 官网地址 https://nacos.io/zh-cn/docs
Spring-Cloud-Alibaba GitHub源码地址 https://github.com/alibaba/spring-cloud-alibaba
前面的《主流微服务一站式解决方案Spring Cloud Alibaba入门看这篇就足够了-开篇》我们已经简单介绍Spring Cloud Alibaba一站式解决方案的入门,对Spring Cloud Alibaba有了基本认识,开发人员可以通过 Spring Cloud 编程模型轻松使用其生态组件来来开发分布式应用服务,而这过程只需添加一些注解和少量配置就可以将 Spring Cloud 应用接入阿里的分布式应用解决方案,最终通过阿里中间件来迅速搭建分布式应用系统。此外阿里云同时还提供了 Spring Cloud Alibaba 企业版 微服务解决方案(包括无侵入服务治理全链路灰度,无损上下线,离群实例摘除等,企业级 Nacos 注册配置中心和企业级云原生网关等众多产品),分布式功能更加强大完善,有兴趣的伙伴可以自行前往了解。
Nacos官网提供Nacos2.0.0-ALPHA2 服务发现性能测试报告,其他的如1.0和2.0配置模块压测报告,1.0服务发现模块的压测报告等都可以去详细查阅官网
Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施,致力于发现、配置和管理微服务,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。简单来说就是集注册中心和配置中心于一体,几乎支持所有市面同类型产品的所有功能,Nacos 支持主流的服务生态包括Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful,可以说是目前国内最主流、最强大、性能最好的注册中心和配置中心的选型,下面为Nacos与其他同类型产品的对比
Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。命名空间 》组 》Service/DataId.
如果有鉴权和配置加密的需求官方也提供相关插件支持。
官方提供多种部署方式,包括下载二进制文件部署、基于Docker和K8S部署,我们这里选择Docker-Compose方式部署
git clone --depth 1 https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
#目前版本为2.0.4,可以编辑vi example/.env进行修改
NACOS_VERSION=v2.0.4
# Using mysql 5.7 也可以选择 mysql 8
docker-compose -f example/standalone-mysql-5.7.yaml up -d
创建命名空间simple_ecommerce(简单电商网站),提交后默认生成命名空间ID为a2b1a5b7-d0bc-48e8-ab65-04695e61db01
创建用户itxs,密码为itxs123
用户itxs绑定CONFIG_MANAGER(配置管理员角色)
为角色CONFIG_MANAGER添加命名空间资源和可读写的操作权限
Nacos官方基于Java技术栈提供多种开发使用的方式,包括基于原生Java、Spring整合、SpringBoot整合、Spring Cloud整合、Dubbo整合等。我们本篇主要是以Spring Cloud Alibaba整合代码开发方式来做示例为主。基于Spring Cloud Alibaba使用方式如果用于生产环境,建议使用对应的官网版本说明,详细可以查看Spring Cloud Alibaba Wiki
组件版本关系:每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本(经过验证,自行搭配各组件版本不保证可用)如下表所示(最新版本用*标记):
下表为按时间顺序发布的 Spring Cloud Alibaba 以及对应的适配 Spring Cloud 和 Spring Boot 版本关系(由于 Spring Cloud 版本命名有调整,所以对应的 Spring Cloud Alibaba 版本号也做了对应变化)
我们这里不是生产环境,用于开发测试学习的话可以选择最新也即是向下兼容的思想,因此Nacos还是使用上面的2.0.4,踩坑了再来解决还能更深刻理解原理。
本示例采用MySQL数据库,以docker方式部署MySQL 8.0.28版本
CREATE DATABASE IF NOT EXISTS storage
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_chinese_ci;
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE DATABASE IF NOT EXISTS order
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_chinese_ci;
DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE DATABASE IF NOT EXISTS account
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_chinese_ci;
DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建工程主Pom文件,目前在主工程业务服务模块先只增加库存微服务,后续再逐步增加其他微服务
xml version=
"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
cn.itxs
simple\_ecommerce
1.0
ecom\_bommodule>
ecom\_commonsmodule>
ecom\_storagemodule>
simple\_ecommerce
pom
a simple electronic commerce platform demo tutorial
1.8
UTF-8
2.6.4
2021.0.1
2021.0.1.0
1.0
1.8
1.8
cn.itxs
ecom\_bom
${ecom.bom.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring.cloud.verison}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring.cloud.alibaba.verison}
pom
import
管理第三方依赖Bom的Pom文件
xml version=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
cn.itxs
ecom\_bom
ecom\_bom
pom
1.0
manage third-party package versions
1.0
1.4.2
8.0.28
1.2.8
3.5.1
1.18.22
5.7.22
8.7.0
2.6.2
1.2.80
3.5.2
2.3
cn.itxs
ecom\_commons
${ecom.commons.version}
io.seata
seata-spring-boot-starter
${seata-spring-boot.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid-spring-boot-starter
${druid.version}
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus.version}
org.projectlombok
lombok
${lombok.version}
provided
cn.hutool
hutool-all
${hutool-all.verison}
org.apache.skywalking
apm-toolkit-trace
${apm-toolkit-trace.version}
com.alicp.jetcache
jetcache-starter-redis
${jetcache.redis.version}
com.alibaba
fastjson
${fastjson.version}
com.baomidou
mybatis-plus-generator
${mybatis-plus-generator.version}
org.apache.velocity
velocity-engine-core
${velocity.version}
公共commons模块的Pom文件,包含Spring Cloud Alibaba常见组件的客户端依赖而不仅仅是本篇的Nacos客户端,后续如增加再逐步补充
xml version=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
simple\_ecommerce
cn.itxs
1.0
4.0.0
ecom\_commons
ecom\_commons
jar
a commons module
1.0
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-undertow
org.springframework.cloud
spring-cloud-starter-bootstrap
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-openfeign
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba.cloud
spring-cloud-starter-dubbo
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-configuration-processor
true
org.springframework.boot
spring-boot-starter-test
test
org.projectlombok
lombok
provided
org.springframework.boot
spring-boot-starter-data-redis
mysql
mysql-connector-java
com.alibaba
druid-spring-boot-starter
com.baomidou
mybatis-plus-boot-starter
创建库存微服务模块,其Pom文件内容如下
xml version=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
simple\_ecommerce
cn.itxs
1.0
4.0.0
ecom\_storage
jar
1.0
ecom\_storage
a simple electronic commerce platform demo tutorial for storage service
cn.itxs
ecom\_commons
org.springframework.boot
spring-boot-maven-plugin
com.aotain.cu.underly.infra.xx1.Xx1ServiceApplication
ZIP
repackage
并创建库存微服务SpringBoot启动类和bootstrap.yml,至此大体工程框架雏形已具备
计划是每个微服务本地bootstrap.yml里只需配置Nacos配置中心的地址,其他配置项全部放在配置中心里管理,因此我们先从Nacos配置中心开始。