Heim > Fragen und Antworten > Hauptteil
PHP中文网2017-04-18 10:34:05
java的话,建议使用quartz,
1.quartz做各类定时任务很方便
2.它是支持集群的,原理是通过数据库表来保证同一个任务只在一个服务上执行。
ringa_lee2017-04-18 10:34:05
假设你最简单的方式使用quartz
,那么你在代码中就要修改了,在job逻辑中加入获取锁的操作,这个锁可以做到数据库,具体方法是:插入一条有业务意义主键记录,执行时,集群中相同的job只会有一条插入成功,这就代表它获得了锁,可以执行,否则退出此次job,不执行。
PHP中文网2017-04-18 10:34:05
Configure Clustering with JDBC-JobStore
Quartz’s clustering features bring both high availability and scalability to your scheduler via fail-over and load balancing functionality.
quartz 本身就是支持集群,容错,负载均衡的。不需要改任何代码即可实现。
ringa_lee2017-04-18 10:34:05
可以做一个中间件系统,专门管理定时任务的触发和消息的订阅和消费,到了时间触发时就发一个消息出来,由集群系统来订阅这条消息。消息可以随机投递到集群中任何任何一台机器。
阿神2017-04-18 10:34:05
使用zookeeper,redis等手动存储定时任务执行状态等信息,保证只执行一次。
将定时任务抽取到一个单独的项目中(单机运行),但是任务具体内容通过远程调用(dubbo,mq等)调用具体的分布式服务。也就是定时任务只是单独的用于任务触发,具体任务还是分布式执行的。
使用各种分布任务调度系统,如Uncode-Schedule