(超详细、带图带源码)Nacos注册中心的搭建与测试

2023-11-13

前言

本系列是从头开始进行学习Nacos的相关知识,从相关概念到业务开发等等。本篇是第三篇,主要知道为什么需要注册中心、为什么选择Nacos作为注册中心和Nacos作为注册中心的快速搭建。

入门篇:阿里Nacos系列——为什么要选择Nacos和Nacos的基础概念
入门篇:阿里Nacos系列——Nacos的核心概念
搭建篇:阿里Nacos系列——Nacos安装教程(带图–手把手教学)
搭建篇:阿里Nacos系列——(超详细、带图带源码)Nacos注册中心的搭建与测试

1 注册中心

1.1 为什么需要注册中心?

在分布式系统中,在微服务架构中会存在以下常见的问题:

  • 服务和服务地址如何进行映射和管理
  • 服务注册后,如何被及时发现
  • 服务异常时,如何进行降级
  • 服务宕机后,如何及时下线
  • 服务如何有效的水平扩展
  • 服务发现时,如何进行路由
  • 注册中心如何实现自身的高可用

1.2 什么是注册中心?

注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。

在这里插入图片描述
在这里插入图片描述

1.3 注册中心的作用

1.解决url地址硬编码问题
2.自动注册和发现
3.实现了动态路由
4.解决负载均衡

2 为什么选择Nacos作为注册中心

这篇文章中有更为详细的介绍入门篇:阿里Nacos系列——为什么要选择Nacos和Nacos的基础概念

Nacos与各种注册中心产品对比图
功能特点 Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重/ metadata/Selector Ribbon Fabio RoundRobin
雪崩保护
自动注销实例 支持 支持 不支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心同步 支持 不支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 不支持 不支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8S集成 支持 不支持 支持 支持 不支持

3 Nacos作为注册中心的快速搭建

Nacos的快速安装:阿里Nacos系列—Nacos安装教程(带图–手把手教学)

3.1 版本对应

官方说明:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

Spring Cloud Version Spring Cloud Alibaba Version Spring Boot Version
Spring Cloud 2020.0 2021.1 2.4.2.RELEASE
Spring Cloud Hoxton.SR8 2.2.5.RELEASE 2.3.2.RELEASE
Spring Cloud Greenwich.SR6 2.1.4.RELEASE 2.1.13.RELEASE
Spring Cloud Hoxton.SR3 2.2.1.RELEASE 2.2.5.RELEASE
Spring Cloud Hoxton.RELEASE 2.2.0.RELEASE 2.2.X.RELEASE
Spring Cloud Greenwich 2.1.2.RELEASE 2.1.X.RELEASE
Spring Cloud Finchley 2.0.4.RELEASE(停止维护,建议升级) 2.0.X.RELEASE
Spring Cloud Edgware 1.5.1.RELEASE(停止维护,建议升级) 1.5.X.RELEASE

3.2 Maven相关引入

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/>
    </parent>


    <groupId>com.shuai</groupId>
    <artifactId>nacos</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <spring-cloud-alibaba.version>2.2.4.RELEASE</spring-cloud-alibaba.version>
        <spring-boot.version>2.2.4.RELEASE</spring-boot.version>
        <org-springframework-cloud>2.2.5.RELEASE</org-springframework-cloud>
        <org-springframework-boot>2.2.9.RELEASE</org-springframework-boot>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
            <version>${org-springframework-cloud}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
            <version>${org-springframework-boot}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入Nacos注册中心客户端依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    <!--使用dependencyManagement指定spring-cloud-alibaba版本-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3.3 yml配置文件

#指定当前服务端口号
server:
    port: 9801
spring:
    application:
#指定当前服务名字,
        name: app-user-server
    # nacos服务端位置(实际使用) 默认就是此配置,可省略此步配置
    cloud:
        discovery:
            server-addr: http://127.0.0.1:8848

配置说明

配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

3.4 测试代码

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
// 开启服务注册发现功能
@EnableDiscoveryClient
public class NacosProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }

    @Value("${server.port}")
    private String port;

    @RestController
    class EchoController {
        @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
        public String echo(@PathVariable String string) {
            System.out.println(port);
            return "Hello Nacos Discovery " + string +" port:"+ port;
        }
    }
}

3.5 启动测试

在这里插入图片描述
启动完成,我们查看下Nacos页面信息是否发生变化
在这里插入图片描述
我们进入这个链接,进行服务测试:http://localhost:9801/echo/shuai在这里插入图片描述
控制台打印结果
在这里插入图片描述

这个时候简单的注册就完成了

3.6 简单的多实例测试

在之前我们可以正常的检测到我们app-user-server服务,这个时候我们使用修改下端口,再次启动新的一个实例,来搭建一个简单的集群。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动第二个实例
在这里插入图片描述
查看Nacos页面信息,这个时候实例数信息就变成了2.
在这里插入图片描述
点击列表后面的-详情内容后,可以查看到所有实例数据的相关信息
在这里插入图片描述

4 基于Nacos进行多服务之间通信(重点)

4.1 搭建Nacos测试客户端

4.1.1 Maven相关引入

与3.2中的Maven大致相同,这里就不进行单独说明

4.1.2 yml配置文件

#指定当前服务端口号
server:
    port: 9807
spring:
    application:
#指定当前服务名字
        name: app-user-clent
#nacos服务端位置(实际使用) 默认就是此配置,可省略此步配置
# 这里我们就直接注释掉进行测试
#    cloud:
#        discovery:
#            server-addr: http://127.0.0.1:8848

4.1.3 Client-测试代码


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
	//RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

    @RestController
    public class TestController {

        private final RestTemplate restTemplate;

        @Autowired
        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            return restTemplate.getForObject("http://app-user-server/echo/" + str, String.class);
        }
    }
}

4.1.4 启动测试

在这里插入图片描述
在这里插入图片描述

4.2 服务通信测试

4.2.1 启动Nacos服务端与服务端

详情见3.5模块
在这里插入图片描述

4.2.2 通信测试

访问:http://127.0.0.1:9807/echo/shuai,可以看到客户端直接成功访问到服务端的业务接口
在这里插入图片描述

4.3 Nacos的负载均衡测试

我们像3.6中启动多个服务端实例
在这里插入图片描述
这个时候我们多次访问 http://127.0.0.1:9807/echo/shuai该地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明Nacos是帮我们完成了简单的负载均衡。

4.2.1 负责均衡配置

我们进入Nacos中服务的详情中
在这里插入图片描述
我们可以看到,在里面可以配置Nacos的权重上下线这些和部署相关的内容,我们就可以根据实际的业务情况进行相关配置
在这里插入图片描述

参考文章:https://blog.csdn.net/leilei1366615/article/details/111144769

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(超详细、带图带源码)Nacos注册中心的搭建与测试 的相关文章

随机推荐

  • 防关联软件技术分析之跨境电商防关联云服务器之超级VPS管理器

    众所周知 亚马逊有一个非常坑爹的规定 那就是同一个人或企业只能运营一个账号 并采用严格的程序对此进行监控 如果发现账户关联 则存在封号的风险 这就意味着 在同一个外网IP环境下操作多个账号是非常危险的 然而 我相信很多卖家手里都会有多个亚马
  • Java IO流

    Java的IO通过java io包下的类和接口来支持 在java io包下主要包括输入流 输出流两种IO流 每种输入 输出流又可分为字节流和字符流两大类 其中字节流以字节为单位来处理输入 输出操作 而字符流则以字符来处理输入 输出操作 1
  • java IO框架分析

    jave io框架 2010 11 10 22 18 34 分类 默认分类 举报 字号 订阅 可从IO的类层次 IO框架的设计模式来论述 总体来说 IO可以分为字节流和字符流 不同在于字符流由字节流包装而来 在IO读入之后经过JVM处理 把
  • 编译语言、解释语言与脚本语言之间的区别

    资料一 1 解释型语言与编译型语言的区别翻译时间的不同 编译型语言在程序执行之前 有一个单独的编译过程 将程序翻译成机器语言 以后执行这个程序的时候 就不用再进行翻译了 解释型语言 是在运行的时候将程序翻译成机器语言 所以运行速度相对于编译
  • 通俗易懂的机器学习——筛选垃圾邮件(贝叶斯分类)

    筛选垃圾邮件 贝叶斯分类 背景及应用 贝叶斯公式 数据集 引入依赖包 数据预处理 全局变量 过滤所有非中文词语 读取邮件 加载邮件 获取概率表 划分训练集和测试集 计算分词的概率表 保存概率表 检查邮件是否为垃圾文件 获取分词对应的概率字典
  • SQL-DataCamp-Joining Data in SQL

    1 Introduction to Joins 1 1 Introduction to INNER JOIN video 1 2 INNER JOIN PostgreSQL was mentioned in the slides but y
  • 大数据课程K17——Spark的协同过滤法

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 了解Spark的协同过滤概念 一 协同过滤概念 1 概念 协同过滤是一种借助众包智慧的途径 它利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度 其
  • Qt开发 之 Windows资源管理器模仿 并 小超越

    文章目录 1 简述 2 优化点 2 1 内存处理 2 1 1 Windows的资源管理器 2 1 1 1 大图标模式 2 1 1 2 超大图标模式 2 1 1 3 其他模式 2 1 2 用Qt做的类似资源管理器的软件 2 2 滑动处理 2
  • geek卸载工具安装和使用

    软件描述 geek可以快速彻底将软件卸载后的垃圾程序删除干净 并且小巧无广告 无需安装 整个大小仅仅几兆 一 软件获取 1 通过网盘直接下载 https pan quark cn s 29d5661ca7de 2 官网下载 打开官网后点击d
  • Spring@Autowired注解与自动装配

    1 配置文件的方法 我们编写spring 框架的代码时候 一直遵循是这样一个规则 所有在spring中注入的bean 都建议定义成私有的域变量 并且要配套写上 get 和 set方法 Boss 拥有 Office 和 Car 类型的两个属性
  • IDER代码检查工具

    随着业务的发展 系统会越来越庞大 原本简单稳定的功能 可能在不断迭代后复杂度上升 潜在的风险也随之暴露 导致最终服务不稳定 造成业务价值的损失 而为了减少这种情况 其中一种比较好的方式就是提高代码质量 比如通过代码审查 从而降低错误风险 但
  • Qt控件米白色主题风格,QSS控件样式,Qt风格,Qt控件源代码

    米白色主题控件风格 使用c 开发 原生控件主题风格 主题预览图 由www qt ui com设计开发完成 提供主题源代码 主题下载地址 http www qt ui com theme UIGTE001 主题预览图 产品官网 www qt
  • 【QT进阶】第五章 QT绘图之自定义控件--仪表盘绘制

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏目录 零基础学QT 文章导航篇 专栏资料 https pan baidu com s 192A28BTIYFHmixRcQwmaHw 提取码 qtqt 点
  • 2.6 矩阵的初等变换

    文章目录 初等变换 行 列 定理 等价 性质 初等方阵 初等方阵与初等变换的关系 三种初等方阵的行列式 逆矩阵 定理 初等矩阵的作用 定理 A可逆条件总结 初等变换法求逆矩阵 初等行变换法 只做行变换 参考 初等变换 行 列 下面是三种初等
  • (5)Qt中的日期和时间

    QDate 日期对象格式化 d 没有前导零的日子 1 to 31 dd 前导为0的日子 01 to 31 ddd 显示 缩写 周一 周二 周三 周四 周五 周六 周日 dddd 显示 完整 星期一 星期二 星期三 星期四 星期五 星期六 星
  • 快速转载他人CSDN博客到自己博客中

    1 右键页面 选择审查元素 2 进入HTML代码页面 选择article content 如何快速找到article content 以谷歌浏览器为例子 鼠标右击 选择检查 点击小箭头 并把鼠标移动到文章内容中 看到baidu pl 点击下
  • 使用 JMeter 完成常用的压力测试

    JMeter 完成常用的压力测试 文档选项 将此页作为电子邮件发送 拓展 Tomcat 应用 下载 IBM 开源 J2EE 应用服务器 WAS CE 新版本 V1 1 摘自 http www 360doc com showWeb 0 0 2
  • C++基础之四个默认函数(构造,析构,拷贝构造,赋值运算符重载)

    文章目录 一 构造函数 构造函数的默认值 赋值方法 二 析构函数 三 拷贝构造函数 四 赋值运算符重载函数 一 构造函数 类的构造函数是类的一种特殊的成员函数 它会在每次创建类的新对象时执行 构造函数的名称与类的名称是完全相同的 并且不会返
  • A State-of-the-Art Survey on Deep Learning Theory and Architectures论文翻译分析

    A State of the Art Survey on Deep Learning Theory and Architectures 摘要 近年来 深度学习在各种应用领域取得了巨大成功 机器学习这一新领域发展迅速 已应用于大多数传统应用领
  • (超详细、带图带源码)Nacos注册中心的搭建与测试

    前言 本系列是从头开始进行学习Nacos的相关知识 从相关概念到业务开发等等 本篇是第三篇 主要知道为什么需要注册中心 为什么选择Nacos作为注册中心和Nacos作为注册中心的快速搭建 入门篇 阿里Nacos系列 为什么要选择Nacos和