Nacos入门

754 阅读3分钟

什么是nacos

NACOS是构建云计算的本地应用程序易于使用的动态服务发现,配置和服务管理平台。 详情见官网

如何使用

Nacos 快速开始 这是官网地址,大家可以直接看文档。 如果不愿看文档的,我下面简单的介绍一下如何下载,使用。 官网是从github上下载源码,但是我们下载比较慢,可以去码云下载

1.运行服务端

看了半天的nacos官网,终于发现了nacos并不是跟eureka一样,有一个服务端的pom文件,可以直接依赖。而是需要去编译源码才可以。

因为我在linux上面下载的最新的nacos源码,编译一直失败,暂时找不到原因,所以我在windows编译了一遍,成功了。下面介绍如何在window上面运行nacos。

//我在D:\project里面拉取代码
git clone https://gitee.com/mirrors/Nacos.git
cd nacos
// 然后在D:\project\Nacos里面打开cmd命令,进行编译
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U 
// 因为是windows平台,直接到D:\project\Nacos\distribution\target\nacos-server-1.3.0-BETA\nacos\bin目录下面执行
startup.cmd

nacos服务端成功运行,浏览器输入http://127.0.0.1:8848/nacos,进入nacos控制台,账号密码默认为nacos。如下图:

NACOS-1.3.0-BETA控制台

2. 服务注册

创建一个项目nacos-example,spring Boot版本2.2.1.RELEASE,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.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>nacos-example</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-example</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <spring-boot.version>2.2.1.RELEASE</spring-boot.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
    // 这是我之前的eureka依赖,注释掉
        <!--        <dependency>-->
        <!--            <groupId>org.springframework.cloud</groupId>-->
        <!--            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>-->
        <!--        </dependency>-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 客户端 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
      
      <!-- 这个待会儿介绍 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

</project>

application.properties配置如下:

server.port=8081
spring.application.name=nacos-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*

创建一个Controller测试

@RestController
public class EchoController {

    @GetMapping(value = "/echo/{string}")
    public String echo(@PathVariable String string) {
        return "Hello Nacos Discovery " + string;
    }
}

最后别忘记了在启动类上面加上注解@EnableDiscoveryClient,没错,不管是eureka还是consul还是现在的nacos都可以统一用这个注解,至于为什么可以看我这个文章,单独来介绍。

启动项目,在nacos控制台的服务管理下面的服务列表中可以看到我们刚才启动的服务。

注册服务
注册服务已经完成了,至于其他的Feign调用大家可以自己去试试,下面介绍一下nacos另一个功能,自动刷新配置。

自动刷新配置

就是pom文件里面刚才没有介绍的依赖。

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

然后我们下一个测试配置类ConfigController读取useLocalCache字段的值,如下:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

重启该服务,浏览器输入http://localhost:8081/config/get,返回false。这是正常的,因为我们配置文件根本写入这个useLocalCache,所以读取的是默认值false。我们这个时候可以打开控制台,添加配置文件。

点击加号,在data id输入example.properties,

确认发布后,再次在浏览器输入http://localhost:8081/config/get,发现返回true,这正是我们在控制台修改的配置,已经自动刷新了。

这里还支持导入配置,我猜测可以结合网关,将路由信息修改后导入,项目会自动获取配置信息,从而可以解决动态路由问题。免责声明,这里只是猜测,并未实践过

参考地址:

nacos官网:nacos.io/zh-cn/docs/…