注册中心Nacos
创始人
2024-04-30 00:21:09
0

Nacos是Spring Cloud Alibaba提供的一个软件

这个软件主要具有注册中心和配置中心(课程最后讲解)的功能

我们先学习它注册中心的功能

微服务中所有项目都必须注册到注册中心才能成为微服务的一部分

注册中心和企业中的人力资源管理部门有相似

当前微服务项目中所有的模块,在启动前,必须添加注册到Nacos的配置

所谓注册,就是将自己的信息,提交到Nacos来保存

Nacos的下载

https://github.com/alibaba/nacos/releases/download/1.4.3/nacos-server-1.4.3.zip

因为Nacos是java开发的

我们要启动Nacos必须保证当前系统配置了java环境变量

简单来说就是要环境变量中,有JAVA_HOME的配置,指向安装jdk的路径

确定了支持java后,就可以启动Nacos了

将nacos-server-1.4.2.zip压缩包解压

双击打开解压得到的文件夹后,再双击打开其中的bin目录

 

 

cmd结尾的文件是windows版本的

sh结尾的文件是linux和mac版本的

startup是启动文件,shutdown是停止文件

Windows下启动Nacos不能直接双击cmd文件

需要在dos窗口运行

在当前资源管理器地址栏输入cmd

 

E:\tools\nacos\bin>startup.cmd -m standalone

startup.cmd:windows启动nacos的命令文件

-m 表示要设置启动参数

standalone:翻译为标准的孤独的,意思是正常的使用单机模式启动

运行成功默认占用8848端口,并且在代码中提示

如果不输入standalone运行会失败

如果报了

"please set JAVA_HOME......."

表示当前项目没有配置java环境变量(主要是没有设置JAVA_HOME)

如果运行没有报错

打开浏览器输入地址

http://localhost:8848/nacos

如果是首次访问,会出现这个界面

登录系统

用户名:nacos

密码:nacos

登录之后可以进入后台列表

不能关闭启动nacos的dos窗口

我们要让我们编写的项目注册到Nacos,才能真正是微服务项目

创建csmall父项目

创建项目名称csmall

我们微服务开发过程中,一般都会使用一个Idea中包含多个项目的形式

这个形式就是先创建一个"父项目",再向这个父项目中创建多个子项目的操作

我们首先创建一个项目:csmall

注意细节的修改

 

不要选择springBoot 3.0.x,要选择2开头的版本

 

上面图片next之后直接点击finish即可

首先,将当前csmall项目修剪为父项目的格式

  • 删除csmall项目的src文件夹,因为父项目不写代码
  • 修改pom文件

最终csmall的pom文件如下


4.0.0org.springframework.bootspring-boot-starter-parent2.5.9 cn.teducsmall0.0.1-SNAPSHOTcsmallDemo project for Spring Boot1.8pom

创建子项目

创建csmall-stock项目

我们每次创建一个子项目之后

都要进行"父子相认"

在父项目的pom文件中,编写子项目的存在


pom

csmall-stock

还需要在子项目的pom文件中对父项目进行继承操作

父项目的第11行到第13行

复制到子项目的第6行到第8行

子项目pom文件修改后


4.0.0cn.teducsmall0.0.1-SNAPSHOT cn.teducsmall-stock0.0.1-SNAPSHOTcsmall-stockDemo project for Spring Bootorg.springframework.bootspring-boot-starter

父子相认完成

这样当前子项目就可以读取父项目中的pom文件信息了

删除stock模块src\test文件夹

父项目管理依赖版本

在我们现在使用maven添加依赖的认知中

有些依赖时必须添加版本号才能执行

有些依赖则不必添加版本号

原因是我们继承的SpringBoot(2.5.9)父项目中,定义了一些常用依赖的版本号


如果我们自己编写的父项目想定义我们项目中需要的依赖版本号的话,也是可以实现的

这样做可以统一所有子项目的版本,在更新版本时,只需要修改父项目中定义的版本号即可

父项目的pom文件添加如下内容


csmall-stock

1.82.2.0



org.mybatis.spring.bootmybatis-spring-boot-starter${mybatis.version}

子项目中如果需要mybatis的依赖只需要添加如下内容即可,无需再指定版本号

org.mybatis.spring.bootmybatis-spring-boot-starter

上面的操作也称之为"锁版本" 

加载正式项目pom文件

因为我们学习微服务的过程中需要很多微服务相关的依赖

这些依赖都需要在父项目中进行版本的管理的

所以我们直接使用分享给大家的完整版项目的父项目pom文件即可

父项目完整最终pom文件如下


4.0.0org.springframework.bootspring-boot-starter-parent2.5.9 cn.teducsmall0.0.1-SNAPSHOTcsmallDemo project for Spring Bootpomcsmall-stock1.82020.0.32.2.2.RELEASE2.5.42.3.0.RELEASE1.0.10.RELEASE2.2.03.4.11.4.08.0.261.18.202.0.92.3.105.5.21.2.451.1.200.9.01.4.2org.projectlomboklombokio.seataseata-all${seata-server.version}org.projectlomboklombok${lombok.version}mysqlmysql-connector-java${mysql.version}runtimecom.alibabadruid${druid.version}org.mybatis.spring.bootmybatis-spring-boot-starter${mybatis-spring-boot.version}com.baomidoumybatis-plus-boot-starter${mybaits-plus.version}com.baomidoumybatis-plus-generator${mybaits-plus.version}com.github.pagehelperpagehelper-spring-boot-starter${pagehelper-spring-boot.version}org.springframework.bootspring-boot-starter${spring-boot.version}org.springframework.bootspring-boot-starter-web${spring-boot.version}org.springframework.bootspring-boot-starter-freemarker${spring-boot.version}org.springframework.bootspring-boot-starter-validation${spring-boot.version}org.springframework.bootspring-boot-starter-security${spring-boot.version}org.springframework.bootspring-boot-starter-oauth2-client${spring-boot.version}org.springframework.bootspring-boot-configuration-processor${spring-boot-configuration-processor.version}org.springframework.securityspring-security-jwt${spring-security-jwt.version}com.github.xiaoyminknife4j-spring-boot-starter${knife4j-spring-boot.version}org.springframework.bootspring-boot-starter-data-redis${spring-boot.version}org.springframework.bootspring-boot-starter-data-mongodb${spring-boot.version}org.springframework.bootspring-boot-starter-data-elasticsearch${spring-boot.version}org.springframework.bootspring-boot-starter-amqp${spring-boot.version}org.springframework.bootspring-boot-starter-actuator${spring-boot.version}org.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring-cloud-alibaba.version}pomimportcom.alibabafastjson${fastjson.version}io.jsonwebtokenjjwt${jjwt.version}org.springframework.bootspring-boot-starter-test${spring-boot.version}testorg.springframework.amqpspring-rabbit-test${spring-rabbit-test.version}testorg.springframework.securityspring-security-test${spring-security-test.version}testio.seataseata-spring-boot-starter${seata-server.version}

配置yml文件内容 

 

server:port: 20000
#公共配置
mybatis:configuration:cache-enabled: false   # 不启用mybatis缓存map-underscore-to-camel-case: true # 映射支持驼峰命名法log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 将运行的sql输出到控制台
knife4j:# 开启增强配置enable: true# 生产环境屏蔽,开启将禁止访问在线API文档production: false# Basic认证功能,即是否需要通过用户名、密码验证后才可以访问在线API文档basic:# 是否开启Basic认证enable: false# 用户名,如果开启Basic认证却未配置用户名与密码,默认是:admin/123321username: root# 密码password: root
spring:profiles:active: dev

上面的配置含义是让SpringBoot读取额外配置文件

我们参数值编写的是dev,是可以随意修改的,这里定义的名称,就是指定配置文件的名称

例如当前我们编写的dev,SpringBoot就会额外加载名称为application-dev.yml文件

我们创建application-dev.yml文件,以备添加配置

将项目注册到Nacos

我们已经讲过,一个项目要想成为微服务项目体系的一部分

必须将当前项目的信息注册到Nacos

我们要添加一些配置,实现business模块启动时注册到Nacos的效果


com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

我们在创建好的application-dev.yml中编写对nacos注册的配置信息

spring:application:# 设置当前应用的名称,这个名字会提交到Nacos,作为当前微服务模块的名称name: nacos-businesscloud:nacos:discovery:# 配置nacos的位置,用于提交当前项目的注册信息server-addr: localhost:8848

按照学习Nacos时的方式,启动一下nacos

启动之后,

重启business模块,如果启动也正常,就应该将当前项目的信息提交给Nacos

在Nacos的服务管理->服务列表中,能看到nacos-business的名称

Nacos心跳机制

常见面试题

心跳:周期性的操作,来表示自己是健康可用的机制

注册到Nacos的微服务项目(模块)都是会遵循这个心跳机制的

心跳机制的目的

1.是表示当前微服务模块运行状态正常的手段

2.是表示当前微服务模块和Nacos保持沟通和交换信息的机制

默认情况下,服务启动开始每隔5秒会向Nacos发送一个"心跳包",这个心跳包中包含了当前服务的基本信息

Nacos接收到这个心跳包,首先检查当前服务在不在注册列表中,如果不在按新服务的业务进行注册,如果在,表示当前这个服务是健康状态

如果一个服务连续3次心跳(默认15秒)没有和Nacos进行信息的交互,就会将当前服务标记为不健康的状态

如果一个服务连续6次心跳(默认30秒)没有和Nacos进行信息的交互,Nacos会将这个服务从注册列表中剔除

这些时间都是可以通过配置修改的

实例类型分类

实际上Nacos的服务类型还有分类

  • 临时实例(默认)
  • 持久化实例(永久实例)

默认每个服务都是临时实例

如果想标记一个服务为永久实例

cloud:nacos:discovery:# ephemeral设置当前项目启动时注册到nacos的类型 true(默认):临时实例 false:永久实例ephemeral: false 

持久化实例启动时向nacos注册,nacos会对这个实例进行持久化处理

心跳包的规则和临时实例一致,只是不会将该服务从列表中剔除

一般情况下,我们创建的服务都是临时实例

只有项目的主干业务才会设置为永久实例

使用Idea启动Nacos

之前我们启动Nacos都是使用dos命令行

启动过程比较复杂,命令比较长

Idea实际上支持我们更加方便的启动Nacos

步骤1:

步骤2:

步骤3: 

配置成功之后

Nacos就会出现在idea的启动选项中了

这种方法实际上只是为了简便大家启动nacos的操作,还是需要掌握命令行的启动方式的!

创建项目

创建csmall-cart子项目

父子相认

子项目pom文件为:


4.0.0cn.teducsmall0.0.1-SNAPSHOT cn.teducsmall-cart0.0.1-SNAPSHOTcsmall-cartDemo project for Spring Bootorg.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-startercom.alibabadruidmysqlmysql-connector-javacn.teducsmall-commons0.0.1-SNAPSHOTcom.github.xiaoyminknife4j-spring-boot-startercom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

创建application.yml文件,内容如下,注意修改了端口号20001 

server:port: 20001
#公共配置
mybatis:configuration:cache-enabled: false   # 不启用mybatis缓存map-underscore-to-camel-case: true # 映射支持驼峰命名法log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 将运行的sql输出到控制台
knife4j:# 开启增强配置enable: true# 生产环境屏蔽,开启将禁止访问在线API文档production: false# Basic认证功能,即是否需要通过用户名、密码验证后才可以访问在线API文档basic:# 是否开启Basic认证enable: false# 用户名,如果开启Basic认证却未配置用户名与密码,默认是:admin/123321username: root# 密码password: root
spring:profiles:active: dev

创建application-dev.yml

spring:application:# 设置当前应用的名称,这个名字会提交到Nacos,作为当前微服务模块的名称name: nacos-cartcloud:nacos:discovery:# 配置nacos的位置,用于提交当前项目的注册信息server-addr: localhost:8848datasource:url: jdbc:mysql://localhost:3306/csmall_db?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=trueusername: rootpassword: root

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关内容

热门资讯

【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
【前端】‘??‘与‘||‘有什... 0 问题 经常写const data = res.data.a ?? ''或者const d...
ChatGPT 怎么用最新详细... ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...