学习Nacos?咱先把服务搞起来,实战教程~

简介: 学习Nacos?咱先把服务搞起来,实战教程~

前言

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

既然拿Nacos作为一个开始,那么我们这篇文章就来补充一下Nacos Server的部署以及Nacos Client的调用,直观的了解一下Nacos都包含了什么功能。这是使用Nacos的基础,也是后续进行深度剖析的依据。强烈建议一起学习一下。

Nacos Server的部署

关于Nacos Server的部署,官方手册中已经进行了很详细的说明,对应链接地址(https://nacos.io/zh-cn/docs/deployment.html )。其他方式的部署我们暂且不说,我们重点说明通过源码的形式进行构建和部署,这也是学习的最好方式。

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/nacos/index.html

这里我们直接访问本机服务:http://127.0.0.1:8848/nacos/index.htmlimage.png默认情况下,用户和密码都是nacos。登录成功之后,大家可以随便点点,其中包含配置管理、服务管理、权限管理、命名空间、集群管理几个板块。

image.png可以看到默认的命名空间为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'

执行之后,在此查看管理后台,会发现服务列表中已经添加了一条记录。image.png由于我们上面是通过一个命令注册的服务,这个服务并不存在,Nacos Server会定时检查服务的健康状态。你会发现,过了一会儿这个服务就不见了。这便是Nacos Server发现服务“挂掉”了,将其移除了。

image.png其他的类似操作,大家可以尝试着通过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/spring-cloud中进行查看。

然后,在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做好准备。其中也涉及到一些实践经验和坑。

目录
相关文章
|
2月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
54 2
|
3月前
|
存储 算法 Java
Nacos学习圣经:从入门到精通 Nacos,最全详解
本文,就是 Nacos 学习圣经,帮助大家彻底掌握 阿里 的核心组件, nacos 。 Nacos学习圣经 正式版本会有更新, 。
Nacos学习圣经:从入门到精通 Nacos,最全详解
|
2月前
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
122 0
|
2月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
97 0
|
5月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
5月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
106 0
|
5月前
|
Dubbo Java Nacos
【实战攻略】破解Dubbo+Nacos+Spring Boot 3 Native打包后运行异常的终极秘籍——从零开始彻底攻克那些让你头疼不已的技术难题!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但使用Dubbo+Nacos+Spring Boot 3进行GraalVM native打包后常遇运行异常。本文剖析此问题及其解决策略:确认GraalVM版本兼容性;配置反射列表以支持必要类和方法;采用静态代理替代动态代理;检查并调整配置文件;禁用不支持的功能;利用日志和GraalVM诊断工具定位问题;根据诊断结果调整GraalVM配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
125 0
|
5月前
|
Java Nacos 开发工具
【Nacos】心跳断了怎么办?!8步排查法+实战代码,手把手教你解决Nacos客户端不发送心跳检测问题,让服务瞬间恢复活力!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心。然而,“客户端不发送心跳检测”的问题时有发生,可能导致服务实例被视为离线。本文介绍如何排查此类问题:确认Nacos服务器地址配置正确;检查网络连通性;查看客户端日志;确保Nacos SDK版本兼容;调整心跳检测策略;验证服务实例注册状态;必要时重启应用;检查影响行为的环境变量。通过这些步骤,通常可定位并解决问题,保障服务稳定运行。
316 0
|
5月前
|
网络安全 Nacos 开发者
【Nacos】神操作!节点提示暂时不可用?别急!7步排查法+实战代码,手把手教你解决Nacos服务实例状态异常,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心,虽广受好评,但仍可能遇到“节点提示暂时不可用”的问题。本文解析此现象及其解决之道。首先需理解该提示意味着服务实例未能正常响应。解决步骤包括:检查服务状态与网络、审查Nacos配置、调整健康检查策略、重启服务及分析日志。通过系统化排查,可有效保障服务稳定运行。
179 0
|
8天前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
171 81
高效搭建Nacos:实现微服务的服务注册与配置中心