Nacos部署与应用

2023-12-28 15:14:19 浏览数 (2)

前言

本文适合刚接触nacos想上手实践的读者。

Nacos下载安装步骤

本次下载的版本为2.0.1

下载Nacos

方式一:进入官网下载压缩包

官网地址

方式二:使用wget命令下载

两种方式:第一种下载速度较慢

代码语言:javascript复制
wget https://github.com/alibaba/nacos/releases/download/2.0.1/nacos-server-2.0.1.tar.gz

或(建议使用第二个)

代码语言:javascript复制
wget https://download.fastgit.org/alibaba/nacos/releases/download/2.0.1/nacos-server-2.0.1.tar.gz

配置MySQL

在解压的路径下找到conf文件夹,里面有一个叫nacos-mysql.sql 的文件,把它下载下来。

新建MySQL数据库

起个名字叫nacos(PS:如果喜欢别的名字,可以改成别的,记得相关的配置的都有跟着改动)

修改数据库配置

进入到conf目录修改application.properties

代码语言:shell复制
vim application.properties

编辑端口号(写一个你喜欢的数字)

代码语言:javascript复制
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=9001

解开数据库的注释

代码语言:javascript复制
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1

编辑数据库连接的地址,用于连接mysql数据库。

账号和密码为MySQL数据库密码。

!!!注意此处的mysql.xxx.xxx:3306/nacos,nacos为此前创建的数据库名。

代码语言:javascript复制
### Connect URL of DB:
db.url.0=jdbc:mysql://mysql.xxx.xxx:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos

启动nacos

进入nacos下的bin目录,会有一些启动脚本。

单机模式

代码语言:javascript复制
sh startup.sh -m standalone

集群模式

代码语言:javascript复制
sh startup.sh

也可以修改配置文件,把下图中的cluster修改为standalone,这样使用startup.sh直接启动单机模式了。

访问Nacos

例如:http://127.0.0.0:9001/nacos/index.html

默认的用户名和密码都是nacos

SpringCloud集成Nacos

利用 Idea 创建 Spring Cloud 项目,New -> Project -> SpringIntializr 其中的父项目(parentGoboyCloudpom.xml内容如下:

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>GoboyNacos</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cloud.goboy</groupId>
    <artifactId>goboycloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>goboycloud</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <java.version>8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--spring cloud依赖 他们的版本是需要一一对应的-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

父项目的 pom.xml 定义了 Spring Cloud 和 Spring Cloud Alibaba 依赖版本,各子项目都使用同一版本下的子依赖版本。

注意!!!spring-cloud-starter-alibaba-nacos-config和spring boot版本对照。

接着创建一个名称为 GoboyNacosmodule ;创建过程为New -> Module -> Maven

pom.xml 内容如下:

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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">
    <parent>
        <groupId>com.cloud.goboy</groupId>
        <artifactId>goboycloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>GoboyNacos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>GoboyNacos</name>
    <description>Demo project for Spring Cloud Nacos</description>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <finalName>${project.name}</finalName>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

继承了 GoboyCloud 的 pom.xml。且引入依赖:

  • spring-cloud-starter-alibaba-nacos-config :作为 Nacos 客户端读取 Nacos 配置。
  • spring-boot-starter-web:提供 Web 接口。

新建bootstrap.yml

先保证Nacos服务已经启动,bootstrap.yml优先级高于application.yml所以配置文件名设置为bootstrap.yml

GoboyNacos 项目中新增 bootstrap.yml ,添加一下内容:

代码语言:yml复制
spring:
  application:
    name: GoboyNacos
  cloud:
    nacos:
      config:
        server-addr: 8.xxx.xx.xxx:9001
        file-extension: yaml #配置内容的数据格式,有properties和yaml类型(可选)
        # refresh : true #开启自动刷新开启后不需要使用@RefreshScope注解

之所以需要配置 spring.application.name 的名称,是因为它是构成 Nacos服务配置 Data Id 的一部分。

Nacos 服务中Data Id 完整格式组成如下:

代码语言:xml复制
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix:默认为 spring.application.name 的值。
  • spring.profiles.active:是当前环境对应的 profile,如果为空,则 -${spring.profiles.active} 为空。
  • file-extension:配置内容格式,支持 propertiesyaml 格式。

上述的 bootstrap.yml 配置表示Nacos Server会读取 Data Id 为 GoboyNacos,file-extension类型为 YAML 配置类。

新建启动类

代码语言:javascript复制
package com.cloud.goboy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class NacosconfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosconfigApplication.class, args);
    }

}

新建测试类

代码语言:javascript复制
package com.cloud.goboy.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RefreshScope
@RestController
public class ConfigController {
    private static final Logger logger = LoggerFactory.getLogger(ConfigController.class);

    @Value("${user:Goboy}")
    private String user;

    @GetMapping(value = "/config")
    public String config() {
        logger.info("nacos user : {}", user);
        return user;
    }
}

这里我们通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。

在配置文件中配置 refresh : true # 开启自动刷新开启后不需要使用@RefreshScope注解。

配置管理Nacos

在 Nacos 控制台添加一个新的配置:

  • Data Id:GoboyNacos
  • Group:DEFAULT_GROUP
  • 配置格式:YAML
  • 配置内容:
代码语言:yml复制
server:
  port: 9080
user: Goboy

配置内容完成后如下图所示:

启动项目

我们从下图中可以看出,在我们本地没有配置server端口为9080的情况下。启动端口变成了9080。

简单的接口测试

Nacos动态配置

@RefreshScope

我们通过@Value注解可以获取到配置中心(yml)的值,但是没有办法动态感知修改后的值,当我们Controller访问的时候,实际上访问的是Controller的Bean实例,服务启动初始化的过程中Bean在单例对象池里面的属性已经赋值了。

原始值:Goboy10086

修改Nacos配置中心:The current value is modified

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

0 人点赞