阿里云视频点播微服务(二)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 阿里云视频点播微服务

3.2.2 后端基本结构


image.png

初始化数据库CREATEDATABASEzx_edu_vod;
USEzx_edu_vod;
CREATETABLEvod_category(
cate_idBIGINTPRIMARYKEY,
cate_nameVARCHAR(64),
`level`BIGINT,
parent_idBIGINT,
`type`VARCHAR(10) COMMENT'取值:default、material');
完善JavaBeanpackagecom.czxy.zx.vod.utils;
importcom.baomidou.mybatisplus.annotation.TableField;
importcom.baomidou.mybatisplus.annotation.TableId;
importcom.baomidou.mybatisplus.annotation.TableName;
importlombok.Data;
importjava.util.ArrayList;
importjava.util.List;
/** vod 分类封装对象(无限极)* @author 桐叔* @email liangtong@itcast.cn*/@Data@TableName("vod_category")
publicclassVodCategory {
@TableIdprivateLongcateId;
privateStringcateName;
privateLonglevel;
privateLongparentId;
privateStringtype;
@TableField(exist=false)
privateList<VodCategory>children;
}
mapperpackagecom.czxy.zx.vod.mapper;
importcom.baomidou.mybatisplus.core.mapper.BaseMapper;
importcom.czxy.zx.vod.utils.VodCategory;
importorg.apache.ibatis.annotations.Mapper;
/*** @author 桐叔* @email liangtong@itcast.cn*/@MapperpublicinterfaceVodCategoryMapperextendsBaseMapper<VodCategory> {
}
servicepackagecom.czxy.zx.vod.service;
importcom.baomidou.mybatisplus.extension.service.IService;
importcom.czxy.zx.vod.utils.VodCategory;
/*** @author 桐叔* @email liangtong@itcast.cn*/publicinterfaceVodCategoryServiceextendsIService<VodCategory> {
}
packagecom.czxy.zx.vod.service.impl;
importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
importcom.czxy.zx.vod.mapper.VodCategoryMapper;
importcom.czxy.zx.vod.service.VodCategoryService;
importcom.czxy.zx.vod.utils.VodCategory;
importorg.springframework.stereotype.Service;
importorg.springframework.transaction.annotation.Transactional;
/*** @author 桐叔* @email liangtong@itcast.cn*/@Service@TransactionalpublicclassVodCategoryServiceImplextendsServiceImpl<VodCategoryMapper, VodCategory>implementsVodCategoryService {
}

image.png

3.2.3 定时添加


  • 每个月1号零点更新数据
  • 修改启动类
packagecom.czxy.zx;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;
importorg.springframework.scheduling.annotation.EnableScheduling;
/*** @author 桐叔* @email liangtong@itcast.cn*/@SpringBootApplication@EnableDiscoveryClient@EnableSchedulingpublicclassZxVodServiceApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(ZxVodServiceApplication.class,args);
    }
}

image.png

packagecom.czxy.zx.vod.schedule;
importcom.czxy.zx.vod.service.VodCategoryService;
importcom.czxy.zx.vod.utils.VideoUtils;
importcom.czxy.zx.vod.utils.VodCategory;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.scheduling.annotation.Scheduled;
importorg.springframework.stereotype.Component;
importjavax.annotation.Resource;
importjava.util.List;
/*** @author 桐叔* @email liangtong@itcast.cn*/@ComponentpublicclassCategorySchedule {
@ResourceprivateVideoUtilsvideoUtils;
@ResourceprivateVodCategoryServicevodCategoryService;
privateLoggerLOGGER=LoggerFactory.getLogger(CategorySchedule.class);
/*** 每月1号零点更新*/@Scheduled(cron="0 0 0 1 * ?")
publicvoidhandlerCategory() {
// 1 获得所有分类List<VodCategory>categoryList=videoUtils.getCategoryList();
// 2 校验通过后,没有添加batchAll(categoryList);
    }
/*** 批量处理所有分类,递归处理子分类* @param categoryList*/privatevoidbatchAll(List<VodCategory>categoryList) {
System.out.println("处理:"+categoryList.size());
if(LOGGER.isInfoEnabled()) {
LOGGER.info("处理:"+categoryList.size());
        }
for (VodCategoryvodCategory : categoryList) {
VodCategoryfindVodCategory=vodCategoryService.getById(vodCategory.getCateId());
if(findVodCategory==null) {
vodCategoryService.save(vodCategory);
if(LOGGER.isInfoEnabled()) {
LOGGER.info("添加:"+vodCategory.getCateId());
                }
            } else {
// TODO 是否更新?            }
// 处理孩子batchAll(vodCategory.getChildren());
        }
    }
}

3.2.4 查询所有分类


image.png

image.png

image.png

packagecom.czxy.zx.vod.controller;
importcom.aliyun.vod.upload.resp.BaseResponse;
importcom.czxy.zx.vo.BaseResult;
importcom.czxy.zx.vod.service.VodCategoryService;
importcom.czxy.zx.vod.utils.VodCategory;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
importjavax.annotation.Resource;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
/*** @author 桐叔* @email liangtong@itcast.cn*/@RestController@RequestMapping("/vodcategory")
publicclassVodCategoryController {
@ResourceprivateVodCategoryServicevodCategoryService;
@GetMappingpublicBaseResultfindAll() {
//1 查询所有List<VodCategory>list=vodCategoryService.list();
//2 处理List<VodCategory>categoryList=newArrayList<>();
Map<Long,VodCategory>cache=newHashMap<>();
list.forEach(vodCategory-> {
if(vodCategory.getParentId() ==-1) {
categoryList.add(vodCategory);
            } else {
VodCategorycacheCategory=cache.get(vodCategory.getParentId());
// 初始化计划List<VodCategory>childrenList=cacheCategory.getChildren();
if(childrenList==null) {
cacheCategory.setChildren(newArrayList<>());
                }
// 追加数据到集合cacheCategory.getChildren().add(vodCategory);
            }
cache.put(vodCategory.getCateId(), vodCategory);
        });
//3 返回returnBaseResult.ok("查询成功", categoryList);
    }
}

3.3 vod转码模板管理


3.3.1 后端基本结构


表结构#转码模板表CREATETABLEvod_template(
template_idVARCHAR(32) PRIMARYKEY,
`name`VARCHAR(128) COMMENT'',
is_defaultVARCHAR(20) COMMENT'取值:Default、NotDefault',
transcode_modeVARCHAR(20) COMMENT'取值:NoTranscode、FastTranscode');
JavaBean,修改VodTemplatepackagecom.czxy.zx.vod.utils;
importcom.baomidou.mybatisplus.annotation.IdType;
importcom.baomidou.mybatisplus.annotation.TableId;
importcom.baomidou.mybatisplus.annotation.TableName;
importlombok.Data;
/*** @author 桐叔* @email liangtong@itcast.cn*/@Data@TableName("vod_template")
publicclassVodTemplate {
@TableId(type=IdType.ASSIGN_UUID)
privateStringtemplateId;      //idprivateStringname;            //名称privateStringisDefault;       //是否默认,取值:Default、NotDefaultprivateStringtranscodeMode;   //模式,取值:NoTranscode、FastTranscode}

image.png

packagecom.czxy.zx.vod.mapper;
importcom.baomidou.mybatisplus.core.mapper.BaseMapper;
importcom.czxy.zx.vod.utils.VodTemplate;
importorg.apache.ibatis.annotations.Mapper;
/*** @author 桐叔* @email liangtong@itcast.cn*/@MapperpublicinterfaceVodTemplateMapperextendsBaseMapper<VodTemplate> {
}

image.png

packagecom.czxy.zx.vod.service.impl;
importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
importcom.czxy.zx.vod.mapper.VodTemplateMapper;
importcom.czxy.zx.vod.service.VodTemplateService;
importcom.czxy.zx.vod.utils.VodTemplate;
importorg.springframework.stereotype.Service;
importorg.springframework.transaction.annotation.Transactional;
/*** @author 桐叔* @email liangtong@itcast.cn*/@Service@TransactionalpublicclassVodTemplateServiceImplextendsServiceImpl<VodTemplateMapper, VodTemplate>implementsVodTemplateService {
}
相关文章
|
30天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
61 2
|
2月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
3月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 09 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
5月前
|
API
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态。
192 18
|
4月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 08 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
6月前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 6 月产品动态
阿里云微服务引擎及 API 网关 2024 年 6 月产品动态
166 20
|
5月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 07 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
6月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 06 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
6月前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
345 3