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 的对比参考 网上找了一个表

Spring Cloud Alibaba脚手架 搭建springcloud脚手架_spring


总结下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

Spring Cloud Alibaba脚手架 搭建springcloud脚手架_配置文件_02

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);
    }

}

Spring Cloud Alibaba脚手架 搭建springcloud脚手架_spring boot_03

Nacos配置中心

Nacos配置核心概念

  • NameSpace 名称空间
    命名空间 nacos支持根据名称空间管理不同的分布式配置中心和服务发现
    不同的名称空间不能相互访问
  • Group
    同一个名称空间下不同的Group对名称空间的精细化管理
  • DataId
    定位具体的一个配置文件实例 根据不同的DataId去读取对应的配置文件
    默认是Spring Cloud Alibaba脚手架 搭建springcloud脚手架_java_04{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的配置文件才能被该项目正确访问

Spring Cloud Alibaba脚手架 搭建springcloud脚手架_配置文件_05

根据我之前yml的配置nacos上创建配置文件如下 发布即可在项目中使用@Value("${config.info:xxx}")访问 如果需要动态配置 需要加上@RefreshScope即可在Nacos修改配置之后动态刷新