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

本文涉及的产品
服务治理 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 {
}
相关文章
|
1月前
|
API
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
|
17天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 05 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
17天前
|
API
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态。
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态
|
5天前
|
NoSQL Java 数据库
优化基于阿里云的微服务架构下的数据库访问性能
在应对大型电商项目中数据库访问性能瓶颈问题时,团队通过阿里云工具分析发现高QPS、慢查询和不合理数据交互是关键。优化措施包括:1) 索引优化,针对慢查询添加或调整索引;2) 开启读写分离,使用RDS读写分离功能和DRDS进行水平拆分;3) 引入Redis缓存热点数据,减少直接数据库访问;4) 服务化数据访问,降低跨服务数据库调用;5) 使用Sentinel进行限流和熔断,保护数据库资源。这些改进显著提升了系统响应速度和用户体验。
|
1月前
|
Dubbo Cloud Native 应用服务中间件
【阿里云云原生专栏】云原生环境下的微服务治理:阿里云 Dubbo 与 Nacos 的深度整合
【5月更文挑战第25天】阿里云Dubbo和Nacos提供微服务治理的强大工具,整合后实现灵活高效的治理。Dubbo是高性能RPC框架,Nacos则负责服务发现和配置管理。整合示例显示,通过Nacos注册中心,服务能便捷注册发现,动态管理配置。简化部署,提升适应性,但也需注意服务稳定性和策略规划。这种整合为云原生环境的微服务架构带来强大支持,未来应用前景广阔。
218 2
|
1月前
|
监控 负载均衡 Java
【阿里云云原生专栏】微服务架构在阿里云云原生平台上的应用实例与优化策略
【5月更文挑战第20天】本文介绍了在阿里云云原生平台实现微服务架构的步骤,包括基于Spring Cloud的Docker化部署、使用ACK部署微服务,以及优化策略:服务发现与负载均衡(借助Istio)和监控日志管理。通过这种方式,企业能提升应用的可扩展性、可维护性和敏捷性。
219 5
|
1月前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态。
|
1月前
|
API
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态。
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 04 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 03 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。

热门文章

最新文章