Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)

由于Eureka的停更,导致新的替代产品Spring Cloud Alibaba逐渐受到重视,从本文开始,笔者将和大家一起学习Spring Cloud Alibaba全家桶。

本文示例项目地址:https://gitee.com/zhaowenyi/spring-cloud-alibaba-demo

1. 认识Nacos

Nacos官网 : https://nacos.io/zh-cn/docs/what-is-nacos.html
Nacos Wiki: http://github.com/alibaba/nacos/wiki
Nacos是Spring Cloud Alibaba中命名与配置中心,其中的Na就是Naming服务命名注册的缩写,Co就是Cofiguration配置的缩写。因此Nacos的功能相当于Eureka和Spring Cloud Config的组合。Eureka的停更,导致众多开发者不得不选择新的墙头,正好阿里的Nacos经历了多年的历练,成功地经受住了大流量,高并发的考验,成为了新的翘楚。

本文将从安装到配置详细的介绍Nacos的基本使用。

2. 下载Nacos

操作系统: Mac
Maven: 3.6.3
Nacos Server :2.0.2
Spring Boot: 2.3.7.RELEASE
Spring Cloud Alibaba: 2.2.2.RELEASE

Nacos相当于一个软件,需要下载安装nacos-server。Nacos Server下载地址

https://github.com/alibaba/nacos/releases

本文使用2.0.2版本


image.png

笔者使用的是mac电脑,所以下载的是 [nacos-server-2.0.2.tar.gz]

image.png

解压压缩包

image.png

3. 启动Nacos

打开终端,进入到解压后的bin目录中

image.png

Nacos启动模式有单机模式和集群模式,在测试环境下我们以单机模式启动。执行以下命令,以单机模式启动

sh  startup.sh -m standalone 

如果出现以下内容,说明启动成功


image.png

4. 登录Nacos

启动成功后,在浏览器中输入http://127.0.0.1:8848/nacos/#/login,然后可以访问到如页面表示启动成功。

账号:nacos
密码:nacos
image.png

登录成功后,进入到以下页面

image.png

5. 停止Nacos

进入安装包的bin目录,执行以下命令,停止Nacos

sh shutdown.sh

出现以下内容,说明停止成功


image.png

6. 以Nacos作为注册中心

服务的注册与发现都是在nacos server端,每个微服务注册到nacos server端即可,因此我们不需要像Eureka一样新增一个Eureka Server项目。在此例中,我们将创建两个项目,一个是服务提供者provider-8081,一个服务消费者consumer-8091。

6.1 IDEA安装插件Alibaba Cloud Toolkit

preferences -> plugins -> 搜索Alibaba Cloud ,选择Alibaba Cloud Toolkit进行安装

image.png
  1. 安装后,重启IDEA。在新建工程的面板左侧找到 Alibaba Java Initializer,选择工程 SDK 1.8,点击下一步;


    image.png

2.选择工程元数据,输入maven坐标,点击下一步;

image.png
  1. 左侧边栏是可以引入的工具,左侧栏选择Spring Cloud Alibaba,勾选Nacos Service Discovery和Nacos Configuration后,点击下一步;
image.png
  1. 选择项目的存储路径后,点击finish完成。
6.2 新建provider-8081项目
  1. 按照上面的步骤创建provider-8081项目,项目结构如下
  1. 完整的pom.xml内容如下,其中主要是spring-cloud-starter-alibaba-nacos-discovery这个依赖


    4.0.0
    com.elio.springcloud.alibaba.demo
    provider-8081
    0.0.1-SNAPSHOT
    provider-8081
    Demo project for Spring Cloud Alibaba

    
        1.8
        UTF-8
        UTF-8
        2.2.0.RELEASE
        2.2.4.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.7.RELEASE
                
                    com.elio.springcloud.alibaba.demo.Provider8081Application
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    




  1. NacosDiscoveryConfiguration 主要是启用Nacos Client,作为客户端注册到服务中心
package com.elio.springcloud.alibaba.demo.nacosdiscovery;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Configuration;

/**
 * @author theonefx
 */
@EnableDiscoveryClient
@Configuration
public class NacosDiscoveryConfiguration {
}

  1. application.properties内容如下,主要是配置Nacos Server的地址
# 应用名称
spring.application.name=provider-8081

# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

server.port=8081

  1. 启动项目,如果启动日志出现以下记录,说明注册成功
 nacos registry, DEFAULT_GROUP provider-8081 172.18.41.106:8081 register finished
image.png
  1. 查看Nacos管理界面,发现已经成功注册了provider-8081
image.png
6.3 新建provider-8081项目
  1. 同provider-8081项目,新增consumer-8091项目,项目结构如下
image.png
  1. pom.xml完整内容如下


    4.0.0
    com.elio.springcloud.demo
    consumer-8091
    0.0.1-SNAPSHOT
    consumer-8091
    Demo project for Spring Cloud Alibaba

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
        2.2.2.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.7.RELEASE
                
                    com.elio.springcloud.demo.Consumer8091Application
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    



  1. application.properties内容如下
# 应用名称
spring.application.name=consumer-8091

# 应用服务 WEB 访问端口
server.port=8091

# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public


  1. 启动项目,注册成功
image.png
image.png
6.4 总结

至此,我们已经成功将两个项目成功注册到Nacos上。通过注册中心,服务可以拉取到别的服务的相关信息。

7 以Nacos作为配置中心

7.1 相关概念
  • profile概念
    Java项目中的配置文件一般分为多个环境配置,生产环境(prod),测试环境(test),开发环境(dev),然后通过spring.profiles.active可以指定使用哪个环境的配置。比如sspring.profiles.active=dev将会读取application-dev.properties的配置内容。

当项目配置文件众多,修改了配置文件内容还需要重启服务,导致配置文件难以管理。Nacos Config的作用就是将这些配置文件集中管理起来,从而可以统一管理并且可以修改实时刷新。

  • NameSpace概念

NameSpace 默认是public,可以区分不同的环境,比如dev,test,prod等。

  • Group概念

如果配置文件名相同,可以用Group区分,因此可以区分不同项目中,配置文件名相同的配置。Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 来配置,当配置项太多或者有重名时,可以通过分组来方便管理。

  • Data Id概念

在使用Nacos Config的过程中,数据存储在Data Id下面,一个Data Id对应一个profile文件。

Data ID的拼接格式:{spring.profiles.active} . ${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置

spring.profiles.active 取 spring.profiles.active 的值,即为当前环境对应的 profile

file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置

7.2 引入Nacos Config依赖

接下来的例子都以provider-8081为例,来介绍如何使用Nacos Config

  1. pom.xml引入以下依赖
      
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
  1. application.properties新增以下配置
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
spring.cloud.nacos.config.prefix= ${spring.application.name}
# 默认是DEFAULT_GROUP
# spring.cloud.nacos.config.group=

  1. 新增测试接口com/elio/springcloud/alibaba/demo/controller/TestController.java
package com.elio.springcloud.alibaba.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName : TestController
 * @Description : 测试
 * @Author : zhaowenyi
 * @Date: 2021/06/23
 */
@RestController
public class TestController {

    @Value("${nacos.config.test:hello world}")
    private String testValue;

    @GetMapping(value = "/hello")
    public String hello() {
        return testValue;
    }
}

image.png
  1. Nacos 管理界面,新增配置
image.png
image.png
image.png
  1. 测试接口, 成功获取到dev的配置
image.png

如果修改配置,可以实时刷新

image.png
image.png
  1. 回滚配置
image.png
image.png

参考:
https://blog.csdn.net/qq_42200163/article/details/109711035

https://www.cnblogs.com/crazymakercircle/p/14231815.html

你可能感兴趣的:(Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇))