搭建SpringCloudAlibaba微服务架构——Nacos配置中心的搭建

搭建SpringCloudAlibaba微服务架构——Nacos配置中心的搭建

敲得码黛 919 2020-11-19

手把手教你搭建SpringCloudAlibaba微服务架构——Nacos配置中心的搭建

目录

@

环境介绍

我用的是Win10系统,为了演示方便,所以就直接把nacos搭在了本地,配置源暂时先用Nacos内嵌的,后面搭建nacos集群时会改用mysql来存储nacos配置信息。

Java环境

nacos是运行在Java环境上的,所以必须要有java环境

Maven环境

maven环境主要用来将nacos源码编译为可执行文件(jar),为什么需要maven环境呢?是因为我傻乎乎的从github下载的是源码包,所以需要通过mvn命令手动编译一下。(我建议直接下载安装包,当然如果你要修改nacos源码的话就当我没说。。)

下载Nacos

源码包虽然需要手动编译,但是源码包非常小,大概只有4M左右,不像安装包那样有70多M,所以如果你网速不是很好的话,下载源码包手动编译其实也是一个不错的选择

Nacos仓库地址:https://github.com/alibaba/nacos/releases(安装包龟速下载中。。。)

源码包—百度网盘:https://pan.baidu.com/s/1qCL7iRbT1gXxjsU7mkLuag 提取码:49ke

安装包—百度网盘:https://pan.baidu.com/s/1z3mPXFStyIJAoECl6eut1g 提取码:l5yc

编译源码包

源码包下载完成并解压后的目录是这个样子。如果你下载的是安装包,那么可以跳过这一个步骤

进入到nacos-1.4.0的根目录下执行 mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U 进行编译

这个命令是我从nacos官网上扒拉下来的:https://nacos.io/en-us/docs/quick-start.html

编译完成后可以看到一堆绿油油的SUCCESS和\nacos-1.4.0\distribution下多出了一个target目录。


然后进入target\nacos-server-1.4.0\nacos目录,接来下的步骤就跟安装包的步骤是一样的了。

安装单机Nacos并启动

安装包下载完成并解压后的目录如下

然后进入bin目录,可以看到以下的几个脚本

我使用的windows系统,所以要通过startup.cmd这个脚本来启动,这个启动脚本默认是集群模式,所以我还需要编辑一下改为单机模式,当然如果你不修改启动脚本而是在启动时加-m standalone参数手动指定也是可以的,但是由于我比较懒,就直接修改脚本了。

脚本修改完成后双击startup.cmd就可以启动Nacos了

温馨提示1:单机启动时第一行会提示"nacos is starting with standalone"",需要按一下回车键确认一下哦

温馨提示2:通过这个这个脚本启动的nacos不是后台进程,所以记得不要关闭这个窗口

接着就可以去浏览器访问了,http://localhost:8848出现如下界面就代表nacos已经成功启动了。

然后输入nacos默认的账号密码nacos/nacos就可以进入nacos的控制台了

搭建Nacos配置中心

项目结构

父工程pom文件

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
        <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
        <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud-sentinel.version>2.1.1.RELEASE</spring-cloud-sentinel.version>
        <sentinel-datasource-nacos.version>1.7.1</sentinel-datasource-nacos.version>
    </properties>
    
    <modules>
        <module>pay-service</module>
    </modules>
    
    <dependencyManagement>
        <dependencies>
            <!--Nacos Config-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

    <repositories>
        <repository>
            <id>maven-ali</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
        </repository>
    </repositories>
</project>

pay-service工程pom文件

<?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>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>pay-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>pay-service</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <!--Nacos Config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--Spring Web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBoot Test-->
        <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>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

server:
  port: 8089
spring:
  application:
    name: pay-service
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
  profiles:
    active: develop

动态刷新配置

然后先添加一个@RestController演示效果( 我是真的懒,Controller都懒得写 直接怼在启动类里面算了),需要关注的是@RefreshScope和@Value这两个SpringCloud原生注解

@SpringBootApplication
@RefreshScope
@RestController
public class PayServiceApplication {

    @Value("${cache:default}")
    private String cache;

    @GetMapping(value = "/hello")
    public String show()
    {
        return cache;
    }
    
    public static void main(String[] args) {
        SpringApplication.run(PayServiceApplication.class, args);
    }

}

然后启动项目并访问http://localhost:8089/hello可以看到返回了cache的默认值:default。

然后再登录nacos的控制台添加配置信息,并点击右下角的发布按钮

这里需要说明一点:Nacos是通过Namespace+Group+DataID这三个要素定位到指定的配置文件的,并且DataId也具有指定的规则

详情请参考官方文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

然后再次访问http://localhost:8089/hello,可以看到cache的值已经被刷新了

最后说一点,按照dataID的规则假如我配置了spring.profiles.active这个属性时,那么我对应的DataID应该是pay-service-develop.properties。但是我发现当pay-service-develop.properties配置文件不存在时,那么nacos也会取pay-service.properties中的配置信息。

代码已上传至github: https://github.com/chhnhcqjava/SpringCloudAlibabaDemo_1.git


# SpringCloudAlibaba # 微服务 # Nacos # 服务注册 # 配置中心