基于Spring打造简单高效通用的异步任务处理系统(转)

本文之前,今天发现使用spring-batch也能够达到相同的效果,不过相比spring-batch,本文使用的数据表更少,且相应的逻辑更简洁,特转如下。
本文转自:http://blog.csdn.net/sfdev/article/details/4056114 原文作者:sfdev

背景

随着应用系统功能的不断新增,而某些功能的实现对实时性要求并不是那么高,但是逻辑却很复杂、执行比较耗时,比如涉及外部系统调用、多数据源等等;此时,我们就希望可以让这些复杂的业务逻辑放在后台执行,而前台与用户的交互可以不用等待,从而提高用户体验;

另外,从系统架构这个层面来说,我们也希望按照不同功能来拆分,以保持各个系统之间的低耦合,当一个系统出现问题时不会影响到其他系统,并且对于独立的各个系统,我们可以专门进行性能优化、监控等;所以我们需要通用、高效的异步任务处理系统;

设计目标

打造轻量级、简单、高效、通用、高扩展性、高可靠性的异步任务处理系统!

系统设计

要实现类似的异步处理系统,相信大家首先想到的就是JMS,Alibaba里面也有基于JMS的异步处理系统,而且该系统在网店系统中应用非常广泛;但由于目前我们阿里软件采用了不同的技术框架,所以不能直接拿来使用;况且,该系统为了实现异步任务系统的并发,采取了JMS与MDB结合的策略,所以系统就依赖于EJB了,这样系统就变得笨重了,由此系统部署的应用服务器必须要支持EJB,一些轻量级的不支持EJB规范的应用服务器就没法部署了;

考虑到如上的系统设计目标,我们的设计思路为:任务DB持久化 + Spring封装Job调度、线程池

继续阅读“基于Spring打造简单高效通用的异步任务处理系统(转)”