开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):技术点-Nacos 注册中心介绍】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11414
技术点-Nacos 注册中心介绍
目录:
一、用框架实现功能
二、Nacos
三、服务注册(serviceedu 为例)
一、用框架实现功能
第一个功能就是删除小节删除视频;
第二个功能就是删除课程删除视频。在我们的课程大纲页面中,
0306是章节,030611是小节,而我们当时章节删除的时候,如果有小节,那就不删,如果没有小节,那就删除。
但是小节删除的话有一个特点。当我们删除小节的时候,里面的视频我们也要删掉。
让我们找到当时删除小节的代码,在 EduVideoController 中找到代码:
//删除小节
//TODO 后面这个方法需要完善:删除小节时候,同时把里面视频删除@DeleteMapping(" {id}")
publicrR deleteVideo(@PathVariable String id) {
videoService.removeById(id): return R.ok();
//修改小节 TODO
第一种方法:
//删除小节
//TODO 后面这个方法需要完善:删除小节时候,同时把里面视频删除@DeleteMapping(" {id}")
publicrR deleteVideo(@PathVariable String id) {
将删除代码放入这里,利用微服务划分成多个代码或者多个服务,而每个服务都是独立运行的,每个服务做他专门的功能,例如,在 edu 中,就专门做课程;在 oss中,做 os 操作;在 vod 中,专门做视频。
而我们刚才在 vod 中,写了一个方法:
//根据视频 id 删除阿里云视频
@DeleteMapping("removeAlyVideo/ {id}")
public R removeAlyVideo(@PathVariable String id) {
try{
T/初始化对象DefaultAcsClient client=InitVodCilent.initVodClient(ConstantVodUtils. ACCESS KEY ID.
//创建删除视频 request 对象
DeleteVideoRequest request =new DeleteVideoRequest();
//向request设置视频 id
request.setVideoIds(id);
//调用初始化对象的方法实现删除
client.getAcsResponse(request);
return R.ok():
}catch(Exception e) {
e.printStackTrace();
throw new GuliException(20001,"删除视频失败”);
可以将这段代码放入其中,但是这样的话就不是微服务了,那我们就需要通过 edu中的方式,去调 vod 中的删除方法,来实现我们的功能,这就叫微服务。
刚刚我们提到这两个服务是独立运行的,但是他们之间可以互相调用。那怎么调用呢?
这就需要我们使用到 spring cloud 的技术,通过 edu 去调 vod 的方法,因为在edu 中,我们只需要相关的,而 vod 中写视频的,edu 中调 vod 中的删除方法,把功能做到,这是一个实习场景。
在实际开发中,如果 edu 是你们这个组做到的,而 vod 是另一个组做到的模块,那就是你们组需要调其他组的模块来实现这样的功能。这个过程就是微服务调用。接下来画一个图来讲述这个过程。
edu 要怎么调用 vod 呢?
我们不能直接通过 edu 去调 vod,有的同学可能会想,把 edu 中的依赖调进去可以吗?
这个是可以的,但是如果这样的话,他就不叫微服务了。这两个要具有关联,但目前他们是没有关联的。就是 edu 和 vod 是独立的,没有什么依赖的关联,要关联,就不要微服务了,但他也不能仅依赖关联,所以如何从 edu 调用 vod,这就是我们要解决的问题。
现在edu中,有删除小节的方法,而我们还需要删除视频,因为是微服务结构,所以我们把删除视频的方法写在了vod中,想通过edu去调vod中的方法,那么该如何做到呢?
按照微服务方式,我们需要模块之间的调用,不能把它引入。引入之后,他就不叫微服务了。
我们需要让他是独立运行的部分,就是801和803。怎么做到?
在我们进行的时候,需要使用到 spring cloud 中的第一个组件:注册中心,即 nacos,需要我们把这两个模块儿或者两个服务先在注册中心进行注册。这是我们要做的第一步。在注册中心注册后,他们就能实现互相的调用。这就是我们的一种做法。
为什么会实现呢?
注册中心就像房产中介,这就是一个很典型的注册中心的案例。
房产中心是连接租房者和房东之间的桥梁,比如目前我有一套房,我想去出租,如果我要出租的话,找不到别人要租这个房子,我应该怎么做呢?我把我的房子放在注册中心进行注册,详细说出房子的特点,只要每月给我金钱,我就可以把房子租出去,就是这么一个过程。
在里边儿进行注册,在注册之后,如果班上有某同学想要去租房,来到注册中心,那房产中心就会把登记好的房子给做出介绍,说出房子的特点,那租房者就会从中挑选出适合自己的房子,这就叫房产中介。
它的作用就是连接租房者和房东的桥梁,二者都在注册中心进行注册,当有合适的匹配就完成了一段合适的交易,就叫房产中介,我们要明确这个过程,当租房子满足条件时,就会有人联系,得到适合的房子。通过房产中介建立起中间的桥梁,通过他连接起双方之间的一段关系,这就是房产中介。
这就是一段典型的注册中心的例子。一般情况下,有一个很著名的卖房的人叫某某,就这个中介跟有点区别。
大家可以了解一下,就是他先把房子租下来,那就成了二房东,然后再把它租出去,这个中介是这么做的。
但真正的中介是你在里边儿注册,别人看到你的条件,租下房子,充当租房子和房东之间的桥梁。这个就叫注册中心,目前我们就是这样的过程,我想通过edu去调vod,不认识,不能直接调过去的,他们是不同的独立模块儿。那我们应该怎么调到呢?
那就需要让两个服务或两个模块儿在注册中心进行注册,等都注册完之后,就能实现这个调用。
比如说地址,联系方式都给了中介,别人租房就能看到这个信息,就是这样的一个过程,所以调用就需要用到注册中心,你注册之后,你就能实现互相调用,像我们提到的租房和房产中介的过程。
所以大家应该知道这个过程,想到房产中介来理解我们的注册中心。总而言之一句话,不同的模块或服务要进行方法的调用,我们需要把我们互相调用的模块要在注册中心中行注册。这就是我们的重点。
videoService.removeById(id):
return R.ok();
//修改小节 TODO
二、Nacos
在这个过程中,我们要使用到 spring cloud。而在 spring cloud 中,就给我们提供了一个注册中心。我们需要看一下微服务中的第二个笔记。
1、基本概念二、服务注册(serviceedu 为例)
把 service-edu 微服务注册到注册中心中,service-vod 步骤相同
1在 service 模块配置 pom
配置 Nacos 客户端的 pom 依赖
1<!--服务注册--> I
<dependency>
3 <groupId>org.springframework.cloud</groupId>
4cartifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId)
5</dependency>
(1)Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式的服务基础设施。
(2)常见的注册中心:
1.Eureka(原生,2.0遇到性能瓶颈,停止维护)
在使用 cloud 的早期,他用的不是 nacos,而是 eureka,我们现在也可以用,但是一般不用。
因为Eureka是最原始的注册中心,性能遇到瓶颈,停止维护,更新也会耗费更多时间,因此被慢慢替换了,但也不排除有人用它,更多的还是用Nacos替换Eureka,功能更加强大,性能也更好。Nacos 由阿里巴巴提供,品质更有保证。
2.Zookeeper(支持,专业的独立产品。例如:dubbo)
3.Consul(原生,GO 语言开发)
4.Nacos
用法更加方便,更简单,性能也更加强化。如果以后在面试中遇到这类问题,可以说是用 Nacos 或者 Eureka
相对于 SpringCloud Eureka 来说,Nacos 更强大。Nacos=Spring Cloud Eureka + Spring Cloud Config ,Nacos可以与Spring,Spring Boot,Spring Cloud 集成,并能代替Spring Cloud Eureka,Spring Cloud Config-通过 Nacos Server和spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
(3)Nacos 是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos 主要提供以下四大功能:
1服务发现和服务健康监测
讲解:这是今天主要用到的技术
2.动态配置服务
3.动态DNS服务
4.服务及其元数据管理
(4)Nacos 结构图
再画一个 Nacos 的流程图,这里分别有三个部分,第一部分是注册中心。除此之外,还有另外两个部分。我们有术语的描述。
从上图我们可以得知,一个为生产者,一个为消费者。我们要通过 edu 调用 vod。大家要注意这里边谁是提供者,谁是消费者,从图中我们知道 edu 是消费者,他应该去调用 vod,vod 就是生产者,这个我们要明确,我们要让二者都要在注册中心注册,在这里,我们都把他们先注册进去,注册是非常复杂的,我们是通过 IP 和端口进行访问的。
所以他的注册方式就是通过他的 IP 和端口进行注册。那么在图中,消费者先得到IP和端口,根据 IP,端口号得到地址,再对生产者进行调用,得到结果,注册中心起到的就是相当于房产中介的效果。是连接租房者和房东的桥梁。或者是生产者和消费者的桥梁。这就叫注册中心,本质上还是对 IP,端口号进行一个访问。
2、Nacos 下载和安装
(1)下载地址和版本
下载地址:https://github.com/alibaba/nacos/releases
下载版本:nacos-server-1.1.4.tar.gz或nacos-server-11.4.zip,解压任意目录即可
(2)启动 nacos 服务
-Linux/Unix/Mac
启动命令(standalone 代表着单机模式运行,非集群模式)
启动命令:sh startup.sh-m standalone
-Windows
启动命令:cmd startup.cmd 或者双击 startup.cmd 运行文件。
访问:http://ocalhost:8848/nacos
用户名密码:nacos/nacos
三、服务注册(serviceedu 为例)
把service-edu 微服务注册到注册中心中,service-vod 步骤相同
1、在 service 模块配置 pom
配置 Nacos 客户端的 pom 依赖
1、<!--服务注册--> I
2、<dependency>
3、<groupId>org.springframework.cloud</groupId>
4、cartifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId)
5、</dependency>