关于spring-cloud:学习Nacos咱先把服务搞起来实战教程

40次阅读

共计 5642 个字符,预计需要花费 15 分钟才能阅读完成。

前言

后面曾经写不少 Nacos 相干的文章了,比方《Spring Cloud 集成 Nacos 服务发现源码解析?翻了三套源码,保质保鲜!》,而且目前也打算写一个 Spring Cloud 的技术解析专栏,一个技术框架一个技术框架的为大家拆解剖析原理和实现。

既然拿 Nacos 作为一个开始,那么咱们这篇文章就来补充一下 Nacos Server 的部署以及 Nacos Client 的调用,直观的理解一下 Nacos 都蕴含了什么性能。这是应用 Nacos 的根底,也是后续进行深度分析的根据。强烈建议一起学习一下。

Nacos Server 的部署

对于 Nacos Server 的部署,官网手册中曾经进行了很具体的阐明,对应链接地址(https://nacos.io/zh-cn/docs/d…)。其余形式的部署咱们暂且不说,咱们重点阐明通过源码的模式进行构建和部署,这也是学习的最好形式。

Nacos 部署的根本环境要求:JDK 1.8+,Maven 3.2.x+,筹备好即可。

从 Github 上下载源码:

// 下载源码
git clone https://github.com/alibaba/nacos.git
// 进入源码目录
cd nacos/
// 执行编译打包操作
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
// 查看生成的 jar 包
ls -al distribution/target/

// 进入到打包好的文件目录,后续可执行启动
cd distribution/target/nacos-server-$version/nacos/bin

通过上述命令进入到 bin 目录下,通常有不同环境的启动脚本:

shutdown.cmd    shutdown.sh    startup.cmd    startup.sh

执行对应环境的脚本即可进行启动,参数 standalone 代表着单机模式运行:

// Linux/Unix/Mac
sh startup.sh -m standalone
// ubuntu
bash startup.sh -m standalone
// Windows
startup.cmd -m standalone

上述操作实用于打包和部署,也实用于本地启动服务,但如果是学源码,则能够间接执行 console(nacos-console) 中的 main 办法(Nacos 类)即可。

执行 main 办法启动,默认也是集群模式,可通过 JVM 参数来指定单机启动:

-Dnacos.standalone=true

如果为了不便,也能够间接在启动类的源码中间接增加该参数:

@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
@ServletComponentScan
@EnableScheduling
public class Nacos {public static void main(String[] args) {
        // 通过环境变量的模式设置单机启动
        System.setProperty(Constants.STANDALONE_MODE_PROPERTY_NAME, "true");

        SpringApplication.run(Nacos.class, args);
    }
}

通过上述步骤,咱们曾经能够启动一个 Nacos Server 了,前面就来看如何应用。

Nacos 治理后盾

在启动 Nacos Server 时,控制台会打印如下日志信息:

         ,--.
       ,--.'|
   ,--,:  : |                                           Nacos 
,`--.'`|' :                       ,---.               Running in stand alone mode, All function modules
|   :  :  | |                      ','\   .--.--.    Port: 8848
:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 47395
|   : ''; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://192.168.1.190:8848/nacos/index.html'   ';.    ;.--.  .-. | /    /''   | |: :|  :  ;_
|   | | \   | \__\/: . ..    '/'   | .; : \  \    `.      https://nacos.io
': |  ; .' ,".--.; |'   ; :__|   :    |  `----.   \
|   | '`--'  /  /  ,.  |'|'.'|\   \  /  /  /`--'  /
': |     ;  :   .'   \   :    : `----''--'.     /
;   |.'|  ,     .-./\   \  /            `--'---''---'        `--`---'`----'

通过下面的日志,能够看出启动的模式为“stand alone mode”,端口为 8848,治理后盾为:http://192.168.1.190:8848/nac…。

这里咱们间接拜访本机服务:http://127.0.0.1:8848/nacos/i…。

默认状况下,用户和明码都是 nacos。登录胜利之后,大家能够轻易点点,其中蕴含配置管理、服务治理、权限治理、命名空间、集群治理几个板块。

能够看到默认的命名空间为 public,默认的用户为 nacos。

此时执行一条 curl 命令,进行模仿服务注册:

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

执行之后,在此查看治理后盾,会发现服务列表中曾经增加了一条记录。

点击这条记录的详情,能够看到更多信息。

因为咱们下面是通过一个命令注册的服务,这个服务并不存在,Nacos Server 会定时查看服务的衰弱状态。你会发现,过了一会儿这个服务就不见了。这便是 Nacos Server 发现服务“挂掉”了,将其移除了。

其余的相似操作,大家能够尝试着通过 curl 命令或客户端工具进行尝试,同时配合治理后盾看对应的数据。

服务发现命令:

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

公布配置命令:

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

获取配置命令:

curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

Spring Cloud 集成 Nacos

最初,咱们再以一个简略的实例来讲 Nacos 集成到 Spring Cloud 我的项目当中,看是否可能将服务注册胜利。对于 Spring Cloud 之间服务的调用,咱们前面文章再专门解说。

首先,新建一个 Spring Boot 我的项目,引入 Spring Cloud 和 Spring Cloud Alibaba 的依赖,残缺的 pom.xml 文件如下:

<?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.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.springcloud</groupId>
    <artifactId>spring-cloud-alibaba-nacos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-alibaba-nacos</name>
    <description>springcloud alibaba nacos 集成 </description>
    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.4.2</spring-boot.version>
        <spring-cloud.version>2020.0.0</spring-cloud.version>
        <cloud-alibaba.version>2021.1</cloud-alibaba.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</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>
    </dependencies>

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

</project>

其中 dependencyManagement 中定义了 Spring Cloud 和 Spring Cloud Alibaba 的依赖的版本信息。这里须要留神的是 Spring Cloud 和 Spring Boot 的版本之间是有限度的。这个能够在 https://spring.io/projects/sp…

而后,在 yml 中配置 nacos 注册核心服务器地址:

spring:
  application:
    name: nacos-spring-cloud-learn
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

此时,启动服务,查看 Nacos Server 的控制台,会发现,像后面间接执行 curl 命令的成果一样,胜利的将服务注册到 Nacos 中了。

小结

本文通过给大家解说如何部署 Nacos 服务、如何集成到 SpringCloud,为前面更进一步学习 SpringCloud 做好筹备。其中也波及到一些实践经验和坑。

Nacos 系列

  • 《Spring Cloud 集成 Nacos 服务发现源码解析?翻了三套源码,保质保鲜!》
  • 《要学习微服务的服务发现?先来理解一些科普知识吧》
  • 《微服务的灵魂摆渡者——Nacos,来一篇原理全攻略》
  • 《你也对浏览源码感兴趣,说说我是如何浏览 Nacos 源码的》
  • 《Nacos 中曾经有 Optional 应用案例了,是时候慎重对待这一语法了》
  • 《Nacos 源码中为什么应用了 String.intern 办法?》
  • 《学习 Nacos?咱先把服务搞起来,实战教程》

正文完
 0