java – 如何优雅地处理数千个Quartz失火?
我们有一个需要的应用程序
>夜间重新处理大量的数据,和 在这两种情况下,约有10,000个石英作业产生并运行.在夜间情况下,我们有一个石英cron工作,可以产生10,000个作业,每个作业单独处理数据的工作. 我们的问题是,我们正在运行大约30个线程,所以石英工作当然会失火,并继续失火直到一切都被处理.处理时间长达6小时.这10,000个作业中的每一个涉及可以并行处理并且完全独立的特定域对象. 10,000个作业中的每一个可以花费可变的时间(从半秒到一分钟). 我的问题是: 有没有更好的方法来做到这一点? 一个关于或架构的注释:我们运行两个三个节点的集群.石英版本有点旧(2.0.1),并且在quartz.properties文件中启用了聚类. 解决方法
不需要产生新的石英作业. Quartz是一个调度程序,而不是任务管理器. 在夜间重新处理中 – 您只需要一个石英cron作业来调用一些负责管理和运行10,000个任务的服务.在“按需”的情况下,石英不应该参与其中.直接调用该服务. 该服务如何管理10,000个任务? 通常情况下,当只有一个JVM可用时,您只需使用一些 Callable<String> task = new Echo(input); // Echo is just some Callable HazelcastInstance hz = Hazelcast.newHazelcastInstance(); IExecutorService executorService = hz.getExecutorService("default"); Future<String> future = executorService.submitToMember(task,member); String echoResult = future.get(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |