一种面向作业流(工作流)的轻量级可复用的异步流水开发框架JobFlow的设计与实现

一种面向作业流(工作流)的轻量级可复用的异步流水开发框架JobFlow的设计与实现

 

       要做这个东东的想法由来以久了的说,一个月以前动手把代码实现了下来,今天觉得如果实在不写成博文记录下来的话,不知又要推到何年何月了。嗯,废话不多说,直入正题了~

       在实际的开发过程中,我们经常会遇到这样的情况:海量的并发用户发送请求要求服务器处理,而服务器集群之间彼此也经常会传递请求,用于完成特定的任务。我们可以把处理每个请求的过程理解为是一种任务的执行,这样的话,就相当于有一堆的作业摆在那时需要执行。而我们所要关心的是作业的数据结构是如何描述的、作业是如何存放、如何取出的以及是如何执行的。

       基于上述的思路,我们可以将任何的操作流程封装在一个Job,并将其丢入到一个Job池中,Job池最好设置成阻塞模式,这样即可唤醒等待的多个处理器从Job池中取出Job并执行。这样一个框架的形成就牵涉到了宏观设计的问题:即JobJob池及处理器这三种最重要的资源是如何定义和组织的。JobFlow整体的框架结果如下图所示:

 

为了便于简化开发过程,使用的开发语言为Java,但这种设计思路是基于面向对象的,具备普适意义,感兴趣的可以自己实现C++版本。代码的组织结构截图如下:

 

一、Job作业的设计

       Job即是对处理某个任务/作业执行流程的一种抽象,Job接口提供一个最重要的方法:run(),我们可以定义具体的Job类,实现run()方法,用于填充必要的业务逻辑,在run()执行过程中可能会产生新的Job。按照这样的思路,我们可以在一个大Jobrun()方法定义相关的执行流程,从而派生出若干个小Job,继而实现了对一个大Job的拆分过程,同时每小Job也还可以继续做拆分

       如下图所示,简单地举例:我们定义了加法Job、减法Job、乘法Job及除法Job,每种Job均实现了Job接口,对于run()方法做了对应的填充,分别实现了两个数的相加、相减、相乘和相除。

 

二、作业池JobPool的设计

       既然生成了Job

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值