CLPS34发布逻辑说明Word文档格式.docx
- 文档编号:22416062
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:24
- 大小:2.95MB
CLPS34发布逻辑说明Word文档格式.docx
《CLPS34发布逻辑说明Word文档格式.docx》由会员分享,可在线阅读,更多相关《CLPS34发布逻辑说明Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
clps.core.publish是发布的核心模块,基于common.schedule的调度机制,定义数据准备任务和数据发布任务的Task实体,还有与之对应的任务处理者Actor子类、发布资源Resource子类、资源驱动ResourceDriver子类。
clps.core.publish组件还包含任务超时处理机制,以及关于查询任务、取消任务、调整任务顺序的进一步封装。
clps.ext.publish是对clps.core.publish的扩展,包含发布资源的注册与修改,任务和资源的分组策略定义与注册,与DTA和内容集成门户的对接。
contlisp.clps.syncgather为DTA和内容集成门户提供接口。
clps.ext.utpublish、clps.ext.iptvpublish、clps.ext.ctshpublish用于与第三方业务平台对接,分别对应UT、IPTV3.0、上海电信。
clps.ext.contentRankingGathering、clps.ext.folderTemplatePublish、clps.ext.pagePublish、clps.ext.baseDataPublish、clps.ext.scenarioPublish、clps.ext.serviceRegionPublish是针对不同的发布内容所做的扩展模块,在数据准备阶段生成任务数据和报文,进行一部分任务完成前的后续处理操作。
数据准备细节中,还涉及到与具体内容相关的其他组件的依赖,此处不做描述。
contlisp.clps.workbeach包含最主要的任务操作入口,包括定义任务、查询任务、取消任务、调整任务顺序、重发任务、停止任务。
定义任务的入口,还有个别散布在需要触发发布的其他组件中,此处不做描述。
clps.core.siteMgmt、contlisp.clps、clps.ext.siteTargetSystem为任务和资源定义提供基础数据,contlisp.clps.alarmlog提供系统操作日志支持。
3整体流程描述
发布的整体概要流程见下图:
图-2发布整体概要流程
一次发布操作对应一个PublishJob和多个PublishSubJob,定义发布的站点、目标系统、内容数据类型、内容数据范围。
发布的进行,首先生成数据准备任务,由底层调度组件进行调度执行,数据准备任务成功完成后,转记入任务历史,同时生成数据发布任务,有底层调度组件进行调度执行,数据发布任务完成,则整个发布过程结束。
数据准备任务和数据发布任务有各自的PublishTask子类,间接继承底层调度组件的ScheduledTask类。
每类任务要定义,并在系统启动时注册任务处理者、资源、资源驱动器,供调度框架使用,处理任务的状态流转。
每个任务的生命周期分为待调度、执行和回调三大阶段。
任务被加入调度队列则是待调度状态,在调度器遍历队列到该任务并且有足够资源时,任务被移出调度队列并开始执行;
任务执行结束并注册回调,当前线程会被锁住,直到异步回调被触发;
回调处理完成则任务结束,被转入任务历史。
4业务要点说明
发布的目标系统分为两大类——内容集成门户和第三方业务平台,发布的流程在生成数据准备任务时就出现分支。
内容集成门户和第三方业务平台(以下简称为同构系统和异构系统),分别有对应的数据准备任务和数据发布任务,还有相应的处理者、资源、驱动等。
图-3发布任务生成
当前系统有多处入口可以触动不同类型的发布操作。
所有的发布操作统一按照站点和目标系统的划分触发一次或多次发布。
每次发布需要指定唯一一个站点和唯一一个目标系统,生成一个PublishJob,根据发布的内容生成PublishJob的一个或多个PublishSubJob。
区分目标系统是同构或异构系统,生成相应的数据准备任务,交由调度组件进行调度。
已对接的异构系统包括UT、IPTV3.0、上海电信三方,其中IPTV3.0又分为媒体分发平台、业务管理平台、业务能力平台,五者对应五种目标系统类型。
5分部详细说明
5.1任务调度
5.1.1对象模型
common.schedule组件的对象模型见下图:
图-4common.schedule组件对象模型
1.Scheduler是调度器,可调度的对象是ScheduledTask的子类。
任务调度执行过程中需要用到ScheduledTaskActor的子类作为任务处理者,ScheduledResource的子类作为资源,ScheduledResourceDriver的子类作为资源驱动。
2.每定义一种需要被Scheduler调度的任务,需要定义任务实体(继承自ScheduledTask),以及执行该类任务的任务处理者(继承自ScheduledTaskActor),执行过程中需要消耗的资源(继承自ScheduledResource),资源驱动(继承自ScheduledResourceDriver),四者通过使用java泛型形成对应。
3.在Scheduler初始化(init方法被调用)时,任务处理者、资源、资源驱动的实例,以及与任务实体类的对应关系,会被注册入调度器,封装成SchedulerContext对象。
4.可以为任务和资源分别定义分组策略,作为调度时分配资源的依据。
任务分组策略类要实现ScheduledTaskGroupStrategy接口,资源分组策略要实现ScheduledResourceGroupStrategy接口。
需要通过监听StrategyInitializeEvent,调用Scheduler的bind方法为任务和资源指定分组策略。
5.调用Scheduler的schedule可以将任务加入调度。
6.Scheduler初始化完成前,会遍历注册的所有SchedulerContext对象,调用其start方法,启动一个任务调度线程SchedulerThread,处理队列中的任务。
5.1.2流程描述
任务加入调度器后,执行的具体流程见下图:
图-5common.schedule组件任务调度流程
SchedulerThread定义了调度线程。
在启动后会不停获取可用资源,扫描SchedulerContext加入调度队列中的任务,找到可执行的任务就生成注册的ScheduledTaskActor对象,执行任务。
ScheduledTaskActor对象从ApplicationContext中获取,ScheduledTaskActor在注入时不能定义成单例,否则多任务并发调度会出现异常。
ScheduledTaskActor在执行完execute方法后,线程会进行等待,直到注册的Callback对象被调用,处理回调并唤醒线程,返回任务执行结果。
ScheduledTaskActor的execute是抽象方法,preDone(Object...args)是空方法,具体任务的执行和回调处理,需要子类重写,实现业务逻辑。
5.2发布资源
5.2.1对象模型
图-6发布资源相关对象模型
1.发布可用资源随目标系统变更。
每一个目标系统分别有一个数据准备资源和数据发布资源,分别对应数据准备任务和数据发布任务。
2.资源的类型由目标系统类型决定。
同构系统对应的数据准备资源是DataPreparationTaskResource类的实例,数据发布资源是DataPublishTaskResource类的实例。
异构系统对应的数据准备资源是IsomerismDataPreparationTaskResource类的实例,数据发布资源是IsomerismDataPublishTaskResource类的实例。
3.资源的能力值由目标系统属性决定。
目标系统的属性resourceCapacity值决定数据准备资源和数据发布资源的能力值,目标系统属性变更时,会触发资源的能力值随之更改。
4.为了将不同目标系统的任务与发布资源精确对应分配,要为每种类型的任务和资源指定分组策略。
数据准备任务和数据发布任务的分组策略是PublishScheduledTaskGroupStrategy的实例,数据准备资源和数据发布资源的分组策略是PublishScheduledResourceGroupStrategy的实例。
5.2.2流程描述
1.加载所有发布资源。
PublishTaskResourceLoader的init方法,在spring配置文件中,置为bean的init-method。
该方法遍历所有的目标系统,根据目标系统的类型和resourceCapacity属性值,生成相应的数据准备资源和数据发布资源。
通过offerResource方法,调用资源驱动继承自ScheduledResourceDriver的offer方法注册。
2.发布资源变更。
发布资源能力值随目标系统属性变更,流程如下图:
图-7发布资源变更流程
新增、修改、删除目标系统时,在目标系统信息变更完成后,均生成发布资源变更事件PublishResourceEvent,事件指明变更的目标系统、对发布资源的操作类型、资源能力值的变更量。
监听器PublishResourceEventListener处理事件时,判断操作类型:
如果是增加发布资源操作,调用PublishTaskResourceLoader的offerResource方法,按照变更量增大相应发布资源的能力值;
反之,调用PublishTaskResourceLoader的removeResource方法,按照变更量减小相应发布资源的能力值。
3.分组策略绑定。
底层调度框架调度器初始化时,会触发StrategyInitializeEvent事件。
PublishScheduleGroupStrategyInitializer监听该事件,调用调度器的bind方法,为DataPreparationTask、DataPublishTask、IsomerismDataPreparationTask、IsomerismDataPublishTask绑定PublishScheduledTaskGroupStrategy的实例作为分组策略,为DataPreparationTaskResource、DataPublishTaskResource、IsomerismDataPreparationTaskResource、IsomerismDataPublishTaskResource绑定PublishScheduledResourceGroupStrategy的实例作为分组策略。
5.3数据准备
5.3.1对象模型
图-8发布数据准备相关对象模型
1.发布开始,PublishJob和PublishSubJob生成后,DataPreparationPublishService的schedule方法被调用。
通过调用接口PublishTaskFactory的getDataPreparationPublishTask(PublishJobjob)方法,生成数据准备任务,加入调度器。
PublishTaskFactoryImpl实现了getDataPreparationPublishTask(PublishJobjob)方法,根据目标系统的类型,生成DataPreparationTask或IsomerismDataPreparationTask的实例。
2.DataPreparationTaskActor和IsomerismDataPreparationTaskActor是处理者子类,都重写了execute和preDone方法,进行数据准备任务的执行与回调。
3.DataPreparationTaskResourceDriver和IsomerismDataPreparationTaskResourceDriver是资源驱动子类。
4.PublishSubJob中的内容数据类型不同,对应不同的发布类型,数据准备过程中,要根据目标系统类型和发布类型找到相应的handler。
handler进行具体内容数据的整理,以及准备要发送给DTA的数据和报文。
当前,同构系统发布中包含6类数据,分别是排行榜(ContentRankingPublishSubJobHandler)、模板(TemplatePublishHandler)、栏目(PagePreparationPublishSubJobHandler)、服务(ServicePreparationPublishSubJobHandler)、基础数据(BaseDataPublishSubJobHandler)、场景(ScenarioPublishSubJobHandler)、服务区域(ServiceRegionPublishSubJobHandler);
异构系统发布中包含3类数据,分别是栏目(PageIsomerismPreparationPublishSubJobHandler)、节目单(SchedulePreparationPublishSubJobHandler)、服务(ServiceIsomerismPreparationPublishSubJobHandler)。
5.3.2流程描述
以同构系统数据准备为例,数据准备简要流程如下图:
图-9数据准备流程
1.异构系统发布的数据准备流程与同构系统发布大致相同。
异构系统发布的数据准备流程入口是IsomerismDataPreparationTaskActor的execute方法,资源驱动等其他类对应到异构系统定义。
与同构系统发布不同的是:
(1)在处理回调时,要先检查是否存在要发布到对端的xml文件,如果存在则生成并调度数据发布任务IsomerismDataPublishTask,不存在则发布结束。
多个xml文件会对应生成多个数据发布任务。
(2)通过PublishFuture对象进行控制,PublishJob会在所有IsomerismDataPublishTask执行完成后更新状态,数据准备也是在此时进行回调后续处理,然后更新状态。
即数据准备任务会在所有的数据发布任务完成后才完成。
2.CLPS实例化DtaAsyncServlet提供服务接口,接收DTA的异步回执消息,触发回调处理。
5.4同构系统数据发布
5.4.1对象模型
图-10同构系统数据发布相关对象模型
5.4.2流程描述
同构系统数据发布,简要流程如下图:
图-11同构系统数据发布流程
CLPS实例化IpeAsyncServlet提供服务接口,接收IPE异步回执消息,触发回调。
5.5异构系统数据发布
5.5.1对象模型
图-12异构系统数据发布相关对象模型
1.每一类异构系统要定义接口DataPublisher的实现类作为发布器。
实现publish方法与异构系统对接,发送消息;
实现processPublishResult方法处理回调结果,解析发布成功的数据。
2.抽象类AbstractDataPublisher实现了DataPublisher接口,发布器继承AbstractDataPublisher并实现方法即可。
init方法配置为发布器bean的init-method,在初始化bean时注册发布器。
3.当前与异构系统的对接均是使用WebService接口。
在每一个接收异步回执的服务接口中,要调用IsomerismDataPublishPublishService的invoke(StringtaskCode,booleanresult,Objectobj)方法触发回调。
5.5.2流程描述
图-13异构系统数据发布流程
5.6任务发布状态变更
5.6.1PublishJob发布状态变更
1.PublishJob继承自父类TaskJob的属性status,用于表示PublishJob在发布过程中的状态。
属性类型是Integer,所有的属性值常量定义在com.onewaveinc.clps.core.publish.Constants中。
2.同构系统发布,PublishJob发布状态的变更如下图:
图-14同构系统发布PublishJob发布状态变更
3.异构系统发布,PublishJob发布状态的变更如下图:
图-15异构系统发布PublishJob发布状态变更
5.6.2PublishTask发布状态变更
1.定义数据准备和数据发布任务的类,均继承抽象类PublishTask。
PublishTask继承自父类Task的属性status,用于表示任务在发布过程中的状态。
2.同构系统发布,数据准备任务(DataPreparationTask)发布状态的变更如下图:
图-16DataPreparationTask发布状态变更
3.同构系统发布,数据发布任务(DataPublishTask)发布状态的变更如下图:
图-17DataPublishTask发布状态变更
4.异构系统发布,数据准备任务(IsomerismDataPreparationTask)发布状态的变更如下图:
图-18IsomerismDataPreparationTask发布状态变更
5.异构系统发布,数据发布任务(IsomerismDataPublishTask)发布状态的变更如下图:
图-19IsomerismDataPublishTask发布状态变更
6后续开发规范
6.1增加发布内容类型
1.在com.onewaveinc.clps.asset.publish.entity.PublishEntityConstants中定义发布内容类型的publishType常量。
publishType需要一个String常量值和一个int常量值,两者一一对应。
int常量值需要与DTA沟通。
2.在相关的发布入口处,根据业务需求编写PublishSubJob生成代码,PublishSubJob的requestType属性值要置为第1点中定义的publishType常量值。
3.根据需要发布的目标系统类型,定义PublishSubJob的Handler。
同构系统发布,需要定义Handler类继承com.onewaveinc.clps.core.publish.handler.DataPreparationPublishSubJobHandler<
DataPreparationTask>
;
异构系统发布,需要定义Handler类继承com.onewaveinc.clps.core.publish.isomerism.handler.IsomerismDataPreparationPublishSubJobHandler<
IsomerismDataPreparationTask>
。
此类Handler在数据准备任务执行时,辅助组织数据、生成报文、处理回调。
Handler要重写getPublishSubJobTypes()方法,返回Handler处理的subJob类型数组,即包含第1点中定义的publishType常量值的数组。
同一个Handler允许处理多种subJob类型。
4.Handler类都需要实现handle(Ttask,PublishJobjob,PublishSubJobsubJob)方法、generateMessage(Ttask,PublishJobjob,PublishSubJobsubJob)方法和invoke(Ttask,PublishJobjob,PublishSubJobsubJob,booleanresult)方法。
handle方法在数据组织时被调用,要生成对应的PublishSequence对象,生成要发布到对端的内容数据。
generateMessage方法在生成发布到DTA的报文时被调用,形成报文内容。
invoke方法在处理DTA回调时被调用,当前主要是调用存储过程,形成发布视图或后续数据处理。
6.2对接异构系统
当前对接的异构系统都是遵循IPTV规范的第三方业务平台,共同点包括:
1.数据准备由DTA负责,DTA形成数据描述xml文件,数据发布时CLPS提供文件地址给对端。
2.发布时的信息交互包含CLPS同步请求、对端同步回复、对端异步回执、CLPS对异步回执的同步回复。
3.接口是WebService接口。
如果对接新的第三方业务平台,满足上述第1、2点,可以采取如下步骤开发:
1.定义新的目标系统类型,在com.onewaveinc.media.cms.entity.TargetsystemProtocolMap中定义目标系统类型常量,编写目标系统新建、修改相关的页面与代码。
目标系统类型值需要与DTA沟通。
2.定义新的组件用于与第三方业务平台对接。
组件要依赖clps.core.publish组件和contlisp.clps组件。
3.在新组件中定义发布器Publisher类,继承com.onewaveinc.clps.core.publish.isomerism.publisher.AbstractDataPublisher。
Publisher的publisherType属性值,要置为第1点中定义的目标系统类型常量值,可以在spring初始化bean时注入。
Publisher用于在数据发布任务执行时被使用。
4.Publisher要实现publish(longtargetSystemId,StringftpFileUrl,StringcorrelateId)方法、processPublishResult(IsomerismDataPublishTasktask,List<
PublishSuccessData>
successDatas,Object[]result)方法。
publish向对端系统系统发送请求,并接收分析同步回执。
processPublishResult在处理对端系统异步回执时,用于分析回执结果,解析发布成功的数据。
5.在新组件中要定义与第三方业务平台交互的接口。
接收异步回执的服务接口中,通过调用IsomerismDataPublishPublishService的invoke(StringtaskCode,booleanresult,Obj
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CLPS34 发布 逻辑 说明