SpringCloud 脚手架搭建从入门到放弃(一) 注册中心Nacos搭建
闲来无事,着手搭建一个基于SpringCloud Alibaba 的微服务脚手架,一方面熟悉Spring Cloud 的相关API,另一方为以后工作直接上脚手架方便快速开发,架构参考了Gitee GVP项目Pig项目,Pig是一个全面Spring Cloud的脚手架,参考Pig架构设计搭建自己的脚手架。
技术选型
- JDK8
- Spring Boot 2.2.2.RELEASE
- Spring Cloud Hoxton.SR1
- Spring Cloud Alibaba 2.1.0.RELEASE
- Spring Security
- Spring Cloud Oauth2.0
- Mybatis Plus 3.3.1
- Hutool-all 5.1.0
Nacos 简介
an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications
摘自官网的介绍 Nacos是一个易用为构建云服务应用的动态服务发现 配置 服务治理的管理平台。
项目使用nacos 来作为服务发现 和 配置中心使用
关于nacos 和 Eureka 的对比参考 网上找了一个表
总结下nacos的优势
nacos支持CP 和 AP 两种模型,支持中文,直接整合分布式配置中心无需格外部署,更方便的设置权重
eureka 2.X 已经凉了停更进维
Naocs部署
参考官网文档 https://nacos.io/zh-cn/docs/deployment.html
集群部署参考官网文档: https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
本文采用nacos 1.1.4 参考最新版本下载地址 https://github.com/alibaba/nacos/releases
1.解压nacos-server-1.1.4.zip文件
2.创建MySQL数据库 版本要求:5.6.5+
初始化Nacos的配置文件 执行conf目录下的nacos-mysql.sql
3.修改配置文件让Nacos配置持久化
进入\nacos\conf目录修改application.properties文件 增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
配置如下
spring.datasource.platform=mysql
db.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
访问默认Naocs管理平台 http://localhost:8848/nacos 输入用户名nacos 密码nacos登录
Nacos
Naocs左侧导航条分别管理配置中心,集群服务管理,Nacos自身集群的管理
Nacos整合Spring Cloud
1.添加依赖
<!--Spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<-- 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>
2.Yml配置文件 这里需要注意因为需要用到nacos的配置中心功能,所以需要写boostrap.yml文件而不是写application.yml文件 具体原因参考SpringBoot配置文件加载顺序
spring:
profiles:
active: test
application:
# 注册到nacos的微服务名
name: cloud-service-alibaba-payment
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
namespace: db04e794-7fea-4aec-840b-ef2b2e23f137 # 配置nacos上创建的命名空间的ID 不配置默认就是public
file-extension: yaml # 采坑 目前2.1.0 yml需要写成yaml
group: DEFAULT_GROUP # 配置需要加载文件的
sharedDataids: application.yml # 共用的配置文件 多个用,隔开
3.主启动类添加@EnableDiscoveryClient注解
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(basePackages = {"com.ycorn.payment.dao"})
public class PaymentAlibabaMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentAlibabaMain8001.class, args);
}
}
Nacos配置中心
Nacos配置核心概念
- NameSpace 名称空间
命名空间 nacos支持根据名称空间管理不同的分布式配置中心和服务发现
不同的名称空间不能相互访问 - Group
同一个名称空间下不同的Group对名称空间的精细化管理 - DataId
定位具体的一个配置文件实例 根据不同的DataId去读取对应的配置文件
默认是{spring.profile.active}.${spring.cloud.nacos.config.file-extension}
Nacos Config 文件获取规则
DataId默认规则
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
DataId为:
以后上面的配置的DataID为{配置的项目名称-项目环境.配置的文件后缀}
如果配置NameSpace需要指定具体的NameSpaceId
不同的NameSpace将配置和微服务类似物理分割,在不同NameSpace下的微服务之间测试是无法调用
spring:
profiles:
active: test
application:
# 应用名字要相同 注册到nacos才认为是同一个服务..即服务的高可用
name: cloud-service-alibaba-payment
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
#namespace: db04e794-7fea-4aec-840b-ef2b2e23f137 # 配置nacos上创建的命名空间的ID
file-extension: yaml # 采坑 目前2.1.0 yml需要写成yaml
group: DEFAULT_GROUP
示例: 参考上述配置文件的DataId就是cloud-service-alibaba-payment-test.yaml
需要在namespaceId为db04e794-7fea-4aec-840b-ef2b2e23f137的名称空间下创建一个默认Default的group的文件配置格式选择yaml的配置文件才能被该项目正确访问
根据我之前yml的配置nacos上创建配置文件如下 发布即可在项目中使用@Value("${config.info:xxx}")访问 如果需要动态配置 需要加上@RefreshScope即可在Nacos修改配置之后动态刷新