Spring Cloud学习(三)【Nacos注册中心】

文章目录

  • 认识 Nacos
  • Nacos 安装
  • 使用 Nacos 完成服务注册
  • Nacos 服务分级存储模型
  • 集群负载均衡策略 NacosRule
  • 根据权重负载均衡
  • Nacos 环境隔离(命名空间)
  • Nacos 和 Eureka 的区别


认识 Nacos

Nacos 是阿里巴巴的产品,现在是 SpringCloud 中的一个组件。相比Eureka 功能更加丰富(服务注册与发现、分布式配置),在国内受欢迎程度较高。

Nacos 安装

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:

GitHub主页:https://github.com/alibaba/nacos

GitHub的Release下载页:https://github.com/alibaba/nacos/releases

注意 Linux 和 Mac 解压时,要使用 tar -xvf 命令解压(不能手动)

tar -xvf nacos-server-1.4.1.tar.gz

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解压完成后通过如下命令启动 nacos(进入到 nacos/bin 目录下[linux])

sh startup.sh -m standalone

然后访问地址 http://localhost:8848/nacos/#/login ,出现如下界面代表安装成功

在这里插入图片描述

默认账号和密码都是 nacos

使用 Nacos 完成服务注册

  1. cloud-demo 父工程中添加 spring-cloud-alilbaba 的管理依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  1. 注释掉 order-serviceuser-service 中原有的 eureka 依赖。

  2. 添加 nacos 的客户端依赖:

<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 修改 user-service&order-service 中的 application.yml 文件,注释 eureka 地址,添加 nacos 地址:
spring:
	cloud:
	    nacos:
	      server-addr: localhost:8848  # nacos 服务地址
  1. 启动并测试:

在这里插入图片描述
可以发现服务成功注册到 nacos

Nacos 服务分级存储模型

在这里插入图片描述

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高
本地集群不可访问时,再去访问其它集群

集群具有容灾的作用

在这里插入图片描述

配置实例的集群属性

yaml 文件中配置为 HZ 集群将 userservice1 / userservice2 实例启动

在这里插入图片描述

spring: 
	cloud:
	    nacos:
	      server-addr: localhost:8848  # nacos 服务地址
	      discovery:
	        cluster-name: HZ

yaml 文件中配置为 SH 集群将 userservice3 实例启动

spring: 
	cloud:
	    nacos:
	      server-addr: localhost:8848  # nacos 服务地址
	      discovery:
	        cluster-name: SH

可以看到 userservice 有 2 个集群,3 个实例

在这里插入图片描述

HZ 集群 和 SH 集群

在这里插入图片描述

总结:

在这里插入图片描述

集群负载均衡策略 NacosRule

我们现在要做的是让 orderservice 远程调用 userservice 时,优先选择本地集群,所以需要给 orderservice 配置集群

  1. orderservice 的 yaml 配置文件中
spring:
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos 服务地址
      discovery:
        cluster-name: HZ  # 集群名称
  1. order-service 中设置负载均衡的 IRuleNacosRule,这个规则优先会寻找与自己同集群的服务:
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

上述配置是当 orderservice 访问 userservice 服务时生效

当同集群要访问的服务挂掉时,则会访问其它集群的服务

在这里插入图片描述

根据权重负载均衡

实际部署中会出现这样的场景:

  • 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求

Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高

在这里插入图片描述

总结:

在这里插入图片描述

Nacos 环境隔离(命名空间)

Nacos中服务存储和数据存储的最外层都是一个名为 namespace 的东西,用来做最外层隔离

在这里插入图片描述

  1. 在 Nacos 控制台可以创建 namespace,用来隔离不同环境

在这里插入图片描述

  1. 然后填写一个新的命名空间信息:

在这里插入图片描述

  1. 保存后会在控制台看到这个命名空间的 id

在这里插入图片描述

  1. 修改 order-serviceapplication.yml,添加 namespace
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice # 微服务名称
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos 服务地址
      discovery:
        cluster-name: HZ  # 集群名称
        namespace: 52a45462-a6cf-4d9d-9627-110d4896d696  # dev命令空间 ID

在这里插入图片描述

  1. 重启 order-service 后,再来查看控制台:

在这里插入图片描述

  1. 此时访问 order-service,因为 namespace 不同,会导致找不到 userservice,控制台会报错:

在这里插入图片描述

在这里插入图片描述

Nacos 和 Eureka 的区别

nacos注册中心细节分析

Nacos 中将实例分为临时实例与非临时实例

在这里插入图片描述

临时实例和非临时实例

服务注册到Nacos时,可以选择注册为临时或非临时实例,通过下面的配置来设置(ephemeral):

spring:
	nacos:
	      server-addr: localhost:8848  # nacos 服务地址
	      discovery:
	        cluster-name: HZ  # 集群名称
	        namespace: 52a45462-a6cf-4d9d-9627-110d4896d696  # dev命令空间 ID
	        ephemeral: false   # 是否是临时实例

临时实例宕机时,会从nacos的服务列表中剔除,而非临时实例则不会

在这里插入图片描述

在这里插入图片描述

  1. Nacos 与 eureka 的共同点
  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测
  1. Nacos 与 Eureka 的区别
  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/132364.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高频SQL50题(基础版)-3

文章目录 主要内容一.SQL练习题1.1174-即时食物配送代码如下&#xff08;示例&#xff09;: 2.550-游戏玩法分析代码如下&#xff08;示例&#xff09;: 3.2356-每位教师所教授的科目种类的数量代码如下&#xff08;示例&#xff09;: 4.1141-查询近30天活跃用户数代码如下&…

@CreateCache:深度解析其功能与优势

1. CreateCache前言 在现代Web应用程序开发中&#xff0c;缓存是提高性能和响应速度的重要手段之一。CreateCache注解是JetCache框架中用于创建缓存的注解。本文将介绍CreateCache注解以及它在缓存管理中的作用。 2. CreateCache使用示例 以下是使用CreateCache注解的一个简…

计算机组成原理之处理器(单周期)

引言 处理器的实现方式决定了时钟周期长度和CPI。实现方式有单周期与流水线&#xff0c;本篇谈谈单周期处理器。 目前CPU的频率一般是3GHZ/4GHZ&#xff0c;但是频率是有极限值的&#xff0c;受cycletime影响 基本的RISC-V实现 存储指令&#xff1a;ld,sd算术逻辑指令 &…

python3GUI--QQ音乐By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示0.播放页1.主界面1.精选2.有声电台3.排行4.歌手5.歌单 2.推荐3.视频1.视频2.分类3.视频分类 4.雷达5.我喜欢1.歌曲2.歌手 6.本地&下载7.最近播放8.歌单1.一般歌单2.自建歌单3.排行榜 9.其他1.搜索词推荐2.搜索结果 三&#x…

第四节(2):修改WORD中表格数据的方案

《VBA信息获取与处理》教程(10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

容器网络-Underlay和Overlay

一、主机网络 前面讲了容器内部网络&#xff0c;但是容器最终是要部署在主机上&#xff0c;跨主机间的网络访问又是怎么样的&#xff0c;跨主机网络主要有两种方案。 二、 Underlay 使用现有底层网络&#xff0c;为每一个容器配置可路由的网络IP。也就是说容器网络和主机网络…

Spring Boot(二)

1、运行维护 1.1、打包程序 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做package。本操作可以在Idea环境下执行。 mvn package 打包后会产生一个与工程名类似的jar文件&#xff0c;其名称是由模块名版本号.jar组成的。 1.2、程序…

Docker容器网络

一、Docker网络 Docker网络有下面4种配置类型&#xff0c;用的比较多的是Bridge&#xff1a; Null(–netNone) 把容器放入独立的网络空间但不做任何网络配置&#xff1b;用户需要通过运行 docker network 命令来完成网络配置。 Host 使用主机网络名空间&#xff0c;复用主机网…

万字详解Linux内核内存规整!超详细!

1.前言 伙伴系统作为内核最基础的物理页内存分配器&#xff0c;具有高效、实现逻辑简介等优点&#xff0c;其原理页也尽可能降低内存外部碎片产生&#xff0c;但依然无法杜绝碎片问题。外部碎片带来的最大影响就是内存足够&#xff0c;但是却无法满足内存分配需求&#xff0c;…

Spring事务一网打尽

Spring事务一网打尽 什么是事务首先说一个坑Spring 中的事务两种用法三大基础设施编程性事务TransactionManager 实现编程性事务TransactionTemplate 实现编程性事务 声明式事务XML配置声明式事务注解配置声明式事务注解XML混合配置声明式事务 什么是事务 这里要额外补充一点&a…

docker主备节点数据同步

主备节点挂载 在生产环境中&#xff0c;赋予一个docker操作系统的权限是一件不安全的事&#xff0c;在不具有系统操作权限的情况下&#xff0c;主备机无法通过nfs进行挂载。此时&#xff0c;可借助数据卷进行挂载 创建两个数据卷 docker volume create vol1 docker volume cr…

openstack部署后实战

分布式部署规则 1、平常都是两台Node安装OpenStack平台&#xff0c;那如果想分布式部署该怎么做&#xff1f;比如&#xff1a;部署两台Nova服务&#xff0c;一台单独的Neutron服务&#xff0c;一台单独的存储节点等。 整体思想&#xff1a; 如果想要部署两台Nova服务&#xf…

vue3 使用element plus 打包时 报错

vue3vitetselementPlus中运行正常打包出错 能正常运行&#xff0c;但是打包出错 解决打包时出现导入element plus相关的爆红&#xff0c;导致无法打包的问题 如若出现类似于&#xff1a;Module ‘“element-plus”’ has no exported member ‘ElMessage’. Did you mean to…

94.二叉树的中序遍历

描述 : 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 题目 : LeetCode 94.二叉树的中序遍历 : 94. 二叉树的中序遍历 分析 : 这个代码还是很好写的 ...... 解析 : /*** Definition for a binary tree node.* public class TreeNode {* int val;…

前端开发项目中使用字体库

开发中有些项目要求使用固定的字体&#xff0c;这就需要项目中使用字体库。 首先需要下载字体库 将下载的字体文件放进项目中 在项目代码样式文件中定义字体 font-face {font-family: "Tobias-SemiBold";src: url("./assets/font/Tobias-SemiBold.ttf"…

Gogs安装和部署教程-centos上

0、什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发&#xff0c;并且支持 Go 语言支持的 所有平台&#xff0c;包括 Linux、Mac OS X、Windo…

「题解」环形链表的约瑟夫问题

文章目录 &#x1f349;题目&#x1f349;解析&#x1f34c;创建环形链表&#x1f34c;释放指定节点&#x1f34c;其他思路 &#x1f349;写在最后 &#x1f349;题目 &#x1f349;解析 题目的意思就是从环形链表的第一个节点开始数&#xff0c;数到第 m 的时候释放对应的节点…

CMake教程--QT项目使用CMake

CMake教程--QT项目使用CMake Chapter1 CMake教程--QT项目使用CMake1. Basic Cmake Based Project2. Executable VS Library3. Every module has its own CMakeList.txt in its folder3.1 不推荐的做法&#xff1a;3.2 推荐的做法 4. 强制以Debug, Release, RelWithDebInfo, Min…

Mac安装与配置eclipse

目录 一、安装Java&#xff1a;Mac环境配置&#xff08;Java&#xff09;----使用bash_profile进行配置&#xff08;附下载地址&#xff09; 二、下载和安装eclipse 1、进入eclipse的官网 (1)、点击“Download Packages ”​编辑 (2)、找到macOS选择符合自己电脑的框架选项…