专业的编程技术博客社区

网站首页 > 博客文章 正文

Swoole学习八Hyperf做一个Excel异步导出服务

baijin 2025-03-28 14:44:57 博客文章 5 ℃ 0 评论


这次我们利用hyperf的Crontab能力做一个Excel导出功能。基于Hyperf2.0版本进行

场景

Excel导出是我们在日常业务中常用的一种功能,各种数据列表需要在提供查询展示功能的同时,一般也需要带有导出功能,一般在数据量不大的时候直接下载就可以了,但是如果数据量几万、十几万或者更多的时候,容易导致数量大请求超时、内存溢出等问题导致导出失败,解决方案呢有很多种,这里我们使用计划任务的异步形式来做。

这里的限制一方面来自数据库查询的压力,大批量数据查询容易超时内存溢出、第二个方面是Excel生成时会吃掉大量的内存,每个行、每个列都要load到内存中,最后写入到文件,可想这是很可怕的事情。而常规php-fpm下对内存及程序的运行时间都是有限制的。

前提准备

  • 安装crontab组件 composer require hyperf/crontab
  • 利用注解声明一个计划任务,需要配置属性name任务名称、rule也就是执行时间、callback也就是业务执行逻辑,关于注解我们之前已经学习过了hyperf注解
  • 在crontab的callback中编写业务逻辑就可以了

执行逻辑

  • 在数据列表中点击下载的时候,通过接口创建一个下载任务 export_task
  • 计划任务每分钟执行一次,每次通过task状态去获取待处理的任务
  • 处理完成之后将生成的文件路径,更新到task中
  • 在下载中心就可以下载了
  • 计划任务在hyperf中就是一个自定义的进程

相关演示Demo


启动服务后 php ./bin/hyperf.php start 计划任务进程就会启动


同时我们在web端展示两个列表,一个用户列表,一个导出任务列表。

前端这里使用React结合antDesign库简单完成

前端执行:yarn start 将会启动前端页面

相关事项

如果想运行代码的话需要提前准备一下几点:

  • 确认相关表已经创建 php ./bin/hyperf migrate 如果是第一次需要执行 migrate:install 创建migrate表
  • 确认composer相关依赖已经安装 执行 composer install
  • 确认React相关依赖已经安装 执行 yarn add
  • 跨域的解决这里使用hyperf提供的方案

总结

这里只是提供了一种异步的思路,大家可以根据自己的实际业务去构思不同的方案

相关代码:

https://github.com/nobody05/hyperf_study

相关文档:

crontab使用说明:https://hyperf.wiki/2.0/#/zh-cn/crontab

跨域处理:https://hyperf.wiki/2.0/#
/zh-cn/middleware/middleware?id=
%e8%b7%a8%e5%9f%9f%e4%b8%ad%e9%97%b4%e4%bb%b6

ant文档:
https://ant.design/components/table-cn/#
components-table-demo-reset-filter

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表