整合SpringCloud
简介
Spring全家桶--SpringCloud(初级)_小蜗牛耶的博客-CSDN博客_springcloud开源项目
Nacos
(1)Nacos是什么
Nacos 是阿里巴巴推出来的一个开源项目,主要用于动态服务发现、配置管理和服务管理的平台。
(2)常见的注册中心:
- Eureka(原生,2.0遇到性能瓶颈,现在已经停止维护)
- Zookeeper(支持,专业的独立产品。如:dubbo)
- Consul(原生,GO语言开发)
- Nacos
相对于 Spring Cloud Eureka 来说,Nacos 更强大。Nacos = Spring Cloud Eureka + Spring Cloud Config
(3)Nacos功能
Nacos主要提供以下四大功能:
- 服务发现和服务健康监测
- 动态配置服务
- 动态DNS服务
- 服务及其元数据管理
(4)Nacos结构图
安装
解压安装包,进入cmd运行nacos即可
服务注册
我们把后面要用的service-edu、service-oss、service-vod都加入到nacos中
怎么加呢?
1、配置依赖
<!--服务注册--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2、添加服务配置信息
3、添加Nacos客户端注解
在客户端微服务启动类中添加注解
4、启动客户端微服务
启动注册中心
启动已注册的微服务,可以在Nacos服务列表中看到被注册的微服务
服务调用-Feign
feign 英 [feɪn] 美 [feɪn] v. 假装,装作,佯装(有某种感觉或生病、疲倦等)
Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。
后端编码
删除课时的同时删除云端视频
哎,这不就出现了微服务之间互相调用的情况了吗
1、pom文件
引用feign实现远程调用
2、调用端的启动类添加注解
feign 是通过接口+注解实现微服务调用
消费者添加@EnableFeignClients开启feign
3、创建包和接口
业务逻辑接口+@FeignClient配置调用provider服务
创建client包
@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@GetMapping注解用于对被调用的微服务进行地址映射。
@PathVariable注解一定要指定参数名称,否则出错
@Component注解防止,在其他位置注入CodClient时idea报错
前提是我们vod微服务中批量删除是可以用的
4、调用微服务
课程微服务调用视频微服务
目的是删除课程同时删除视频
1、注入vod微服务中删除视频接口vodClient
2、具体流程
前端编码
还是和前面一样,我们每次点击添加小节弹框要清空
//添加小节弹框的方法 openVideo(chapterId) { //弹框 this.dialogVideoFormVisible = true; //清空 this.video = {}; this.fileList = []; //设置章节id this.video.chapterId = chapterId; },
这次我们多添加几个小节来测试能不能同时删除
发布课程后删除课程,看视频点播还有没有视频
服务熔断-Hystrix
Spring Cloud 在接口调用上,大致会经过如下几个组件配合:
接口调用的流程很重要,我们一定要理解
自己用过这些组件的话还是很好理解的
Feign
----->Hystrix
—>Ribbon
—>Http Client
(apache http components 或者 Okhttp)` 具体交互流程上,如下图所示:
当你调用被@FeignClient
注解修饰的接口,它内部实际上是将这个调用转化成了一个feign.request。
feign框架实际上是一个http请求调用的,你这个请求发到feign了。它内部又做了http请求的封装,实际上又转化为了http请求继续发送。
发送到豪猪哥,进行流控和熔断。
之后呢豪猪哥在通过ribbon进行负载均衡,挑选合适的服务端进行发送,选择好机器之后,然后将机器实例的信息请求传递给Http Client
客户端,HttpClient
客户端来执行真正的Http接口调用;
Hystrix(豪猪哥)
Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。
比如一个系统中有很多服务,如果这个系统没有隔离机制,系统随时可能挂掉。因为当某些服务不稳定的时候,可能导致级联错误,从而带来很大的风险。
下图所示,当服务b出现故障的时候,会触发熔断器,阻止了级联失败
feign结合Hystrix使用
1、添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <!--hystrix依赖,主要是用 @HystrixCommand --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <!--服务注册--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--服务调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2、配置文件中添加hystrix配置
3、在service-edu的client包里面创建熔断器的实现类
4、测试熔断器效果
我们模拟视频点播微服务宕机了,我们再去调用它,看看会不会触发hystrix
debug启动edu服务,关闭vod服务,会触发熔断器