不用异步队列实现异步处理较大数量级导入的开发记录20190612140700

简介: 能异步别同步,毕竟对于性能、响应都是好的。最近在做基于老系统拓展批量导入的功能,简单做一下记录,虽然初级但是至少培养记录总结的习惯吧。

能站别躺,为什么?因为能减肥呀。一样的,能异步别同步,毕竟对于性能、响应都是好的。最近在做基于老系统拓展批量导入的功能,与老系统的交互就用DUBBO RPC了,不接MQ了。
如果是走RPC同步业务处理接口,就不能简单粗暴地直接:
1
从上面的交互可以看出,如果这样实现,数据量一大的话肯定各种问题:
1.数据量大的话rpc执行时间长,有可能HTTP请求会超时;
2.中间各个网络节点IO流压力大;
3.文件处理有可能内存溢出;
4.发生运行时异常概率非常高,分布式事务导致结果不一致:RPC那边已经提交了,但是调用方后面发生异常导致两边不一致;
5.客户端响应久,交互差...
那这样肯定要用异步了,不走异步队列的话,用定时任务把。处理数据冗余在数据库,定时任务定时去拿数据处理,维护处理结果:
2
这样执行速度优化了很多,前端响应也快。但是又怕定时器并发问题,虽然是一个服务,但是单个任务执行慢的话怕下一次触发定时任务同步造成脏读,错误并发处理。所以了解了下Spring的定时任务,发现Spring的定时任务默认是单线程的,那这样就不用担心,不然要加锁防止并发了。既然涉及到定时任务的并发控制,顺便记录一下比较简单的设置定时器并发:
一、在定时器上使用@Async注解实现异步任务,并需在启动类配合加上 @EnableAsync才会生效;
二、 手动设置定时任务的线程池大小:不使用@Async注解,新增启动代码配置类:
3
好了,简单做一下记录,虽然初级但是至少培养记录总结的习惯吧。

目录
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
DataWork数据处理问题之调整并发数量如何解决
DataWork数据处理是指使用DataWorks平台进行数据开发、数据处理和数据治理的活动;本合集将涵盖DataWork数据处理的工作流程、工具使用和问题排查,帮助用户提高数据处理的效率和质量。
42 4
|
7月前
|
NoSQL API 调度
.NET开源的轻量化定时任务调度,支持临时的延时任务和重复循环任务(可持久化) - FreeScheduler
.NET开源的轻量化定时任务调度,支持临时的延时任务和重复循环任务(可持久化) - FreeScheduler
105 0
|
2月前
|
存储 前端开发 JavaScript
前端面试:如何实现并发请求数量控制?
前端面试:如何实现并发请求数量控制?
80 0
|
9月前
|
算法 Docker Python
二十七 | 案例篇:为什么我的磁盘I/O延迟很高?
二十七 | 案例篇:为什么我的磁盘I/O延迟很高?
218 0
|
4月前
|
前端开发 UED
面试官:【后端一次性返回10万条数据怎么处理/后端发送大数据量的数据如何处理】
面试官:【后端一次性返回10万条数据怎么处理/后端发送大数据量的数据如何处理】
50 0
|
4月前
|
存储 前端开发
【源码共读】大并发量如何控制并发数
【源码共读】大并发量如何控制并发数
42 0
|
9月前
|
设计模式 算法 安全
并发 并行 同步 异步 你分清了吗
并发 并行 同步 异步 你分清了吗
|
9月前
|
前端开发
大数据量学习:ajax获取数据后将数组重新分组后分批定时渲染的解决方案
大数据量学习:ajax获取数据后将数组重新分组后分批定时渲染的解决方案
65 0
|
9月前
|
数据处理 Go
让消费数据处理更快版本2(有并发控制)-一次性并发获取或者初始化任务最快有效方式
让消费数据处理更快版本2(有并发控制)-一次性并发获取或者初始化任务最快有效方式
|
12月前
|
SQL 消息中间件 JavaScript
效率加倍,高并发场景下的接口请求合并方案
效率加倍,高并发场景下的接口请求合并方案