EverydayOneCat
ps!
阿里云视频点播
1.简介
阿里云视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。
我们这里的使用场景主要是添加小节时需要上传课程的视频,用到阿里云的视频点播。
整体流程:
- 用户获取上传授权。
- VoD下发 上传地址和凭证 及 VideoId。
- 用户上传视频保存视频ID(VideoId)。
- 用户服务端获取播放凭证。
- VoD下发带时效的播放凭证。
- 用户服务端将播放凭证下发给客户端完成视频播放。
2.服务端SDK
sdk的方式将api进行了进一步的封装,不用自己创建工具类。我们可以基于服务端SDK编写代码来调用点播API,实现对点播产品和服务的快速操作。
官网快速入门:https://help.aliyun.com/document_detail/57756.html
2.1安装
添加maven仓库的配置和依赖到pom
1 | <dependency> |
安装非开源jar包
在本地Maven仓库中安装jar包:
下载视频上传SDK,解压,命令行进入lib目录,执行以下代码
1 | mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.11 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.11.jar |
2.2初始化
根据文档示例创建 AliyunVODSDKUtils.java
1 | public class AliyunVodSDKUtils { |
2.3获取视频播放凭证
1 | /** |
2.4获取视频播放地址
1 | /** |
2.5测试本地文件上传
1 | /** |
3.项目整合
3.1创建视频点播微服务
引入依赖(上面有)
application.properties:
1 | # 服务端口 |
注:这里必须配置文件上传大小,否则由于tomcat默认上传大小为1MB,视频大小往往比这个大,会报tomcat下的错误
启动类:
1 |
|
3.2常量和工具类
创建常量类ConstantPropertiesUtil.java读取配置
1 |
|
复制阿里云初始对象工具类
1 | public class AliyunVodSDKUtils { |
3.3后端接口
Controller:
1 |
|
Service实现方法:(根据官方文档修改)
1 |
|
3.4配置nginx
将接口地址加入nginx配置
1 | location ~ /vod/ { |
文件上传用到nginx时要注意,除了在项目配置文件中配置大小限制不报tomcat的错,还需要再nginx配置中也配置nginx上传文件大小。
配置nginx上传文件大小,否则上传时会有 413 (Request Entity Too Large) 异常
1 | client_max_body_size 1024m; |
重启:nginx -s reload
3.5前端实现
整合上传组件:
1 | <el-form-item label="上传视频"> |
数据定义:
1 | fileList: [],//上传文件列表 |
方法定义:
1 | //=================视频管理============ |
微服务调用
当我们删除章节或者课程时,我们也需要删除对应的存储在阿里云的视频。而我们章节或课程的操作是在service_edu工程中,而对阿里云视频的操作是在service_vod工程中,如何在一个模块调用用另一个模块的方法,这就用到微服务了。当然,微服务的作用远不止这么点。我在之前的《2020最新SpringCloud微服务最强入门》中详细介绍过,一些基本操作这里不过多赘述。
1.搭建Nacos服务
Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
先下载并启动Nacos。
把service-edu微服务注册到注册中心中,其他工程步骤相同
(1)配置Nacos客户端的pom依赖
1 | <!--服务注册--> |
(2)配置application.properties,在客户端微服务中添加注册Nacos服务的配置信息
1 | # nacos服务地址 |
(3)在客户端微服务启动类中添加注解
1 |
(4)启动已注册的微服务,可以在Nacos服务列表中看到被注册的微服务
2.服务调用Feign
注册进注册中心,接下来我们可以通过服务调用来实现删除课时的同时删除云端视频
(1)在service_edu模块添加pom依赖
1 | <!--服务调用--> |
(2)在调用端的启动类添加注解
1 |
(3)创建包和接口
@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@GetMapping注解用于对被调用的微服务进行地址映射。
@PathVariable注解一定要指定参数名称,否则出错
@Component注解防止,在其他位置注入CodClient时idea报错
1 |
|
(4)在调用端的VideoServiceImpl中调用client中的方法
1 |
|
3.完善删除课程业务
vod业务实现批量删除视频
1 |
|
edu模块VideoServiceImpl
1 |
|
4.Spring Cloud调用接口过程
Spring Cloud 在接口调用上,大致会经过如下几个组件配合:
Feign
——->Hystrix
—>Ribbon
—>Http Client``(apache http components 或者 Okhttp)
具体交互流程上,如下图所示:
(1)接口化请求调用当调用被@FeignClient注解修饰的接口时,在框架内部,将请求转换成Feign的请求实例feign.Request,交由Feign框架处理。
(2)Feign :转化请求Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,封装了Http调用流程。
(3)Hystrix:熔断处理机制 Feign的调用关系,会被Hystrix代理拦截,对每一个Feign调用请求,Hystrix都会将其包装成HystrixCommand,参与Hystrix的流控和熔断规则。如果请求判断需要熔断,则Hystrix直接熔断,抛出异常或者使用FallbackFactory返回熔断Fallback结果;如果通过,则将调用请求传递给Ribbon组件。
(4)Ribbon:服务地址选择 当请求传递到Ribbon之后,Ribbon会根据自身维护的服务列表,根据服务的服务质量,如平均响应时间,Load等,结合特定的规则,从列表中挑选合适的服务实例,选择好机器之后,然后将机器实例的信息请求传递给Http Client客户端,HttpClient客户端来执行真正的Http接口调用;
(5)HttpClient :Http客户端,真正执行Http调用根据上层Ribbon传递过来的请求,已经指定了服务地址,则HttpClient开始执行真正的Http请求
5.熔断器Hystrix
Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。
改造service-edu模块
(1)在service的pom中添加依赖
1 | <dependency> |
(2)在配置文件中添加hystrix配置
1 | #开启熔断机制 |
(3)创建熔断器的实现类
1 |
|
(4)修改VodClient接口的注解
1 |
(5)测试熔断器效果
结语
至今我还在天上御剑,懂不懂什么叫做光速坠机啊!!还需要马大叔教你吗???