在上面定义的数据库中,记录了订单的基本信息,其中包含了用户是否已经支付的状态,订单允许用户有48小时的支付时间[22],如果超过48小时未支付则订单失效。为了让用户有一个良好的购物体验或者为了促使订单能够成交,还是希望用户能够在规定时间内支付订单,这就需要在订单失效前提示用户支付订单。为了达到此目的,一般会使用定时任务轮流查询未支付订单,然后提示用户支付。
使用前面介绍的定时任务方法,确实能够实现此目的,但是存在以下问题:
■当只启动一个定时任务程序时,虽然最终能够达到通知用户的目的,但是时效性是个问题,单一程序遍历列表并且实现通知的时间较长。
■当为了提高执行速度,启动多个定时任务程序时,集群中的服务无法知道其他服务是否已经执行了通知逻辑,即多个定时任务之间如何协作是个问题。
针对以上两个问题,ElasticJob使用了非常简单的方法就实现了多个定时任务间的协作,从而提高了执行速度。它的原理非常简单,对要执行的任务设定分片总数,然后多个任务实例通过ElasticJob获取各自的分片信息,根据自己的分片信息执行对应的数据部分,从而实现了横向扩容的能力。
ElasticJob是一个开源的分布式任务框架,它使用Zookeeper作为各分片任务的信息管理中心,各任务节点的分片信息可以通过Zookeeper进行查看。
ElasticJob的作用是根据分片总数为每个定时任务的实例分配准确的片段值。ElasticJob不负责定时任务获取到分片值之后的业务逻辑处理。举例来说,现在设定ElasticJob的总分片值是2,同时启动两个定时任务服务A和B,ElasticJob会保证给A和B分配对应的1和2这两个值,至于A拿到了1之后应该怎么执行逻辑,这是编程者要自己定义的。例如在A服务中拿到了1这个分片,可以选择数据库中userid对总数2取模后等于1的数据进行处理。(www.xing528.com)
ElasticJob支持几种任务模式,下面主要介绍Simple类型作业和Dataflow类型作业。这两种作业模式都需要在工程中引入如下依赖。
引入依赖后,在yml配置文件中添加注册中心Zookeeper的信息:
添加注册信息配置类:
添加任务记录配置:
完成如上几步,此工程就实现了ElasticJob的基本信息配置,下面就可以根据不同的任务类型编写不同的代码了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。