微服务环境下的quartz集成的一些想法记录

微服务环境下的quartz集成的一些想法记录

当前项目是基于springcloud 应用的架构,当前业务需要我在一个微应用内集成了quartz完成某些需要定时执行的业务,后其他同事的其他应用其他项目也需要使用调度任务,所以有了将调度任务单独抽取成一个子项目,共其他项目使用的需求,之前的调度任务已经利用quartz 实现了自定义的业务任务表,通过接口可以对任务进行维护;

开始没有多想,直接重构;我将调度任务除web接口层外的核心抽取到一个子模块,其他需要使用的项目直接依赖这个模块,配置完自动装载等一些配置,原来项目启动没有问题。然后其他微应用依赖了这个项目,然后启动后定时任务的执行就出问题了,其他微应用也会执行我的项目的调度任务,而其他应用上下文中没有我的任务体,找到执行对象会报错。

原因经过分析:我当前的定时任务执行的任务表中,我放了类名和方法名等信息,真正执行时再去通过反射或者通过spring容器获取具体的对象执行方法体,假设现在有两个应用 A和B ,这两个应用是不同的但使用同一个数据库(意思就是用的同一份quratz数据),这就造成了A和B只要继承了quartz模块,虽然应用不同但都是同一个quartz集群下的实例,B也会去执行既有的定时任务,B和A不是同应用的不同实例,而是完全的不同应用所以执行具体任务时当然会报错。

经过思考,因为存在不同应用使用同一个数据库的情况,所以这种应用去依赖集成quartz的方式显然不能满足需求,突然想到我们使用微应用,微应用间是相互独立的,互相调用通过rpc调用,想到这一点突然感觉一切都明了了

应该将调度任务抽出来作为一个微应用,其他应用可以暴露出一个公共的接口,供调度任务通过远程调用对应应用的定时任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值