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

时间:2021-7-5 作者:qvyue

由于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版本

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

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

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

解压压缩包

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

3. 启动Nacos

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

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

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

sh  startup.sh -m standalone 

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

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

4. 登录Nacos

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

账号:nacos
密码:nacos
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png

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

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

5. 停止Nacos

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

sh shutdown.sh

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

Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
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进行安装

Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. 安装后,重启IDEA。在新建工程的面板左侧找到 Alibaba Java Initializer,选择工程 SDK 1.8,点击下一步;

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

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

Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. 左侧边栏是可以引入的工具,左侧栏选择Spring Cloud Alibaba,勾选Nacos Service Discovery和Nacos Configuration后,点击下一步;
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. 选择项目的存储路径后,点击finish完成。
6.2 新建provider-8081项目
  1. 按照上面的步骤创建provider-8081项目,项目结构如下
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
  1. 完整的pom.xml内容如下,其中主要是spring-cloud-starter-alibaba-nacos-discovery这个依赖
4.0.0com.elio.springcloud.alibaba.demoprovider-80810.0.1-SNAPSHOTprovider-8081Demo project for Spring Cloud Alibaba1.8UTF-8UTF-82.2.0.RELEASE2.2.4.RELEASEorg.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engineorg.springframework.bootspring-boot-dependencies${spring-boot.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring-cloud-alibaba.version}pomimportorg.apache.maven.pluginsmaven-compiler-plugin3.8.11.81.8UTF-8org.springframework.bootspring-boot-maven-plugin2.3.7.RELEASEcom.elio.springcloud.alibaba.demo.Provider8081Applicationrepackagerepackage
  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
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. 查看Nacos管理界面,发现已经成功注册了provider-8081
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
6.3 新建provider-8081项目
  1. 同provider-8081项目,新增consumer-8091项目,项目结构如下
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. pom.xml完整内容如下
4.0.0com.elio.springcloud.democonsumer-80910.0.1-SNAPSHOTconsumer-8091Demo project for Spring Cloud Alibaba1.8UTF-8UTF-82.3.7.RELEASE2.2.2.RELEASEorg.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engineorg.springframework.bootspring-boot-dependencies${spring-boot.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring-cloud-alibaba.version}pomimportorg.apache.maven.pluginsmaven-compiler-plugin3.8.11.81.8UTF-8org.springframework.bootspring-boot-maven-plugin2.3.7.RELEASEcom.elio.springcloud.demo.Consumer8091Applicationrepackagerepackage
  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. 启动项目,注册成功
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
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的拼接格式:{prefix} -{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.cloudspring-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;
    }
}

Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. Nacos 管理界面,新增配置
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. 测试接口, 成功获取到dev的配置
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png

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

Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
  1. 回滚配置
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png
Spring Cloud Alibaba系列(一):手把手教你使用Nacos(实践篇)
image.png

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

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

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。