- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
文档在线查看实现方案
同步上传异步转换
附件转换类 AttachmentConverter
同步上传:用户上传完附件立马返回前台,避免前台等待时间过长
细节处理:
附件地址入库,预览地址为空
将带有附件ID的附件对象加入转换队列
public static void addToConvertList(Object o)
发文收文公用该函数,因而参数设计为Obejct,以兼容不同附件对象model
方法返回,提示上传成功
此时点击提示转换未完成
Tomcat启动时
应用程序自动加载用于附件转换的servlet,并自动调用初始化方法 init()。该方法会从数据库中将未转换的附件对象加入等待转换的附件队列 convertList 。该队列为静态成员,其实现方案有
采用java自带的同步队列实现。但该队列在队列为空时,代码读取第一个元素会抛出异常,移除第一个元素也会抛出异常。
采用非线程安全的java队列,通过封装该队列的读、写方法实现外部同步。
封装的方式为,将读写方法封装在同一个方法listOperation()内,该方法采用java关键字 synchronized 修饰从而实现同步。代码设计如下:
private static Object listOperator(Obejct o,Boolean isGet), 如通过 isGet为true,则通过Object返回队列 convertList的第一个对象,并将该对象从队列中移除。如果isGet为false,则将Obejct o对象加入队列。由于需要兼容收文、发文附件、因为方法的参数和返回值均使用Object对象。
启动附件的异步转换方法convert()。
异步转换 convert():private void convert();
在条件恒为true的while循环中转换等待转换的附件队列 convertList的第一个附件对象,如果转换成功,则将该对象写回数据库,并将该对象从队列中移除。如果转换失败,则将该对象移动到队列末尾。如果该队列为空,则阻塞while循环所在线程100ms。
存在问题
转换阻塞如何判断及处理?初步想通过处理时间(文件大小的函数,或某个配置文件中的值)来判断是否发生阻塞,如果阻塞就终止当前转换进程。
大并发的情况下,缺乏队列调度算法。过长的队列会导致用户长时间等待。
引言:
之前附近上传的处理办法是附件的上传与转换同步进行,用户上传附件时,只有当成功转换成swf文件后,才会响应上传成功。这样导致用户上传时会长时间等待,用户体验不好。为了改善这一状况,现在准备采用附近同步上传异步转换的方案。这样一来,用户上传完附近立即得到反馈消息,再由后台专门的进程对附件进行swf格式的转换,实现了上传与转换相分离。
1、同步上传异步转换的本质
附件上传与转换分开处理,数据库附件表中有附件的原始地址字段和附件的预览地址字段。附件上传时,将附件原始地址入库,而预览地址置为空,将附件对象加入到附件队列则立即返回。附件的格式转换由后台线程专门去做:不断轮循附件队列,对队列中的附件一一进行格式转换,当附件格式转换成功后,将其附件预览地址更新。
2、附件队列的实现
采用JAVA自带的LinkedList类实现,譔类实现了 HYPERLINK mk:@MSITStore:C:\\Documents%20and%20Settings\\Administrator\\桌面\\JDK_API_1_6_zh_CN.CHM::/java/util/Queue.html \o java.util 中的接口 Queue接口, LinkedList底层采用链表实现,无需考虑队列长度问题。LinkedList本身提供了队列的插入、移除方法:
HYPERLINK mk:@MSITStore:C:\\Documents%20and%20Settings\\Administrator\\桌面\\JDK_API_1_6_zh_CN.CHM::/java/util/LinkedList.html \l offer(E) offer( HYPERLINK mk:@MSITStore:C:\\Documents%20and%20Settings\\Administrator\\桌面\\JDK_API_1_6_zh_CN.CHM::/java/util/LinkedList.html \o LinkedList 中的类型参数 E e) 将指定元素添加到此列表的末尾(最后一个元素)。
HYPERLINK mk:@MSITStore:C:\\Documents%20and%20Settings\\Administrator\\桌面\\JDK_API_1_6_zh_CN.CHM::/java
您可能关注的文档
最近下载
- 个人开通天然气委托书范本 .pdf VIP
- 2025-2026学年人教版(2024)小学体育与健康二年级(全一册)教学设计(附教材目录).docx
- MG-WD系列采煤机说明书.doc
- 2025年河南省高考物理试卷(含答案解析).docx
- 学堂在线网课《生活英语读写》课后作业单元考核答案.docx VIP
- 2025年第42届全国中学生物理竞赛预赛试题(学生版+解析版) .pdf VIP
- 安全牛:API安全技术应用指南(2024版).pdf VIP
- 2024年浙江省中考统考科学试卷试题真题(含答案解析).pdf VIP
- 《吴门验方》学习笔记.docx VIP
- 新目标大学英语-《综合教学教程》第四册(WELearn答案解析).DOC VIP
文档评论(0)