• 背景

    • 有运营同学反馈,最近导出excel会出现超时的情况,初步判断是数据增长太快,数据量太大,请求时间超过了设置的超时时间
  • 尝试
    1. 有考虑直接更改该请求的超时时长,可是治标不治本
    2. 网上搜索发现,有很多人说采用多线程的方式,还没尝试过,不过最近另一个项目使用多线程出现了内存溢出的情况。。。暂时不考虑
  • 方案  
    • 后来找了机智的德叔咨询之后get到一个解决方案,相对简单。整体思路是,后端在开始处理请求之后,维护一个请求的状态用来标记文件是否已经生成,如果文件已经生成,将文件上传到云端返回下载地址,将地址记录,直到下次请求时将地址返回,供前端同学下载。
    • 具体流程如下
      1. 前端同学第一次请求,后端接到请求之后开始生成文件,并返回前端正在处理,用redis记录该次请求,标记状态为正在创建文件
      2. 前端同学需要定时轮询接口,查看文件链接是否生成,可在页面上设置loading效果(直到get到文件的下载url)
      3. 文件生成之后,修改redis记录状态为已生成,且记录地址url,下次接口请求时返回该url。
    • 流程图是这样的
  • 总结
    • 重点是在于采用了异步的思想取代原来同步的流程,这样请求就不会出现超时的情况,无论处理多久都木有关系   
    • 这里采用redis来记录也是考虑到下载会有一个过期时间,一个请求可能过一段时间就无效了 

  

Excel导出功能超时解决方案 -- 异步处理的更多相关文章

  1. Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc

    Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...

  2. 用SpringMvc实现Excel导出功能

    以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: ...

  3. 利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

    我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...

  4. excel导出功能优化

    先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中 ...

  5. excel导出功能原型

    本篇博客是记录自己实现的excel导出功能原型,下面我将简单介绍本原型: 这是我自制的窗体,有一个ListView和一个Button(导出)控件. 这是我在网上找到了使用exel需要引用的库. usi ...

  6. java利用EasyPoi实现Excel导出功能

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...

  7. asp.net excel导出功能

    以下是我在项目开发中所做的关于Excel导出功能,不足之处还望大家指正,相互学习 protected void btn_Export_Click(object sender, EventArgs e) ...

  8. 使用NPOI实现简单的Excel导出功能

    [1]NPOI是啥? NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. POI是一个开源的Java读写Excel. ...

  9. Delphi实现带有格式的Excel导出功能

    功能预览 运行预览 模板样式 存储返参 导出的Excel 2. 代码实现 //执行sql的函数 procedure TForm1.GetReportData(astrsql:string); var ...

随机推荐

  1. C#高性能大容量SOCKET并发(零):代码结构说明

    原文:C#高性能大容量SOCKET并发(零):代码结构说明 C#版完成端口具有以下特点: 连接在线管理(提供在线连接维护,连接会话管理,数据接收,连接断开等相关事件跟踪): 发送数据智能合并(组件会根 ...

  2. C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。

    原文:C#图片灰度处理(位深度24→位深度8) #region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> ...

  3. 解决C/C++程序执行一闪而过的方法(使用getchar,或者cin.get,不推荐system(“pause”))

    简述 在VS编写控制台程序的时候,包括使用其他IDE(Visual C++)编写C/C++程序,经常会看到程序的执行结果一闪而过,要解决这个问题,可以在代码的最后加上system(“pause”).g ...

  4. 深入了解Windows句柄到底是什么(句柄是逻辑指针,或者是指向结构体的指针,图文并茂,非常清楚)good

    总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解. ...

  5. 分享五个404页面模板 超好看的404页面你的网站离不了 seo优化404

    一个完整的网站离不开一个好的404页面,404页面不光是让你的网站美观,它对SEO的作用也很大,你想一下如果用户打开你的网站,输入一个不存在的风址,如果没有404直接就报错了,有了404就能打开一个美 ...

  6. Asp.Net Core 项目 EntityFramework Core 根据登录用户名过滤数据

    1.创建ASP.NET Core Web Applicatoin (MVC)项目,并且使用 Individual User Account 2.创建数据筛选接口 Models->IDataFil ...

  7. 04-MySQL中的数据类型

    1 整体说明MYsql的数据类型#1. 数字:    整型:tinyint  int  bigint    小数:        float :在位数比较短的情况下不精准        double ...

  8. OpenDaylight即将迈入“七年之痒”?

    前段时间看到一篇文章,叫<OpenStack已死?>,讲述了OpenStack自2010年提出之后的9年间各方利益牵扯导致的一系列问题,尽管最终作者的结论是OpenStack现在只是进入了 ...

  9. Django之分页器组件

    class Pagination(object): def __init__(self,current_page,all_count,per_page_num=2,pager_count=11): & ...

  10. KVM虚拟机迁移至VMware

    1.将kvm下虚拟机关机: [root@localhost ~]# virsh list --all Id Name State ----------------------------------- ...