首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找可伸缩的"at“实现

寻找可伸缩的"at“实现
EN

Stack Overflow用户
提问于 2012-04-16 14:23:17
回答 3查看 1.1K关注 0票数 14

我正在寻找一个可扩展的"at“替代方案,具有高可用性。它必须支持在运行时添加和删除作业。

一些背景知识:我有一个应用程序,我触发了数百万个事件,每个事件只发生一次。我不需要cron之类的机制(每月的第一个星期天等),只需要日期、时间和上下文。

目前我正在使用Quartz scheduler,虽然它是一个非常好的项目,但它很难处理我们抛给它的大量事件,即使经过了很多调整(分片、增加轮询间隔等)。由于它在下划线数据库上执行基本锁定。此外,这对我们来说有点过头了,因为基本上我们有数百万个一次性触发器,而作业数量相对较少。

如果有任何建议,我将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2012-06-07 17:28:27

如果我面临同样的情况,我会这样做……

使用队列复制设置在几个框上设置JMS队列集群(例如RabbitMQ或ActiveMQ)。

在我漂亮的高可用性JMS队列中触发所有事件。

然后,我会编写一个代理应用程序,根据需要弹出JMS队列的事件,我可以在多个机器上运行多个代理,并将其与正确的JMS故障转移url等相结合。

如果您的作业正在触发事件,您也可以使用相同类型的模型...

仅供参考,在核心Java中更好的调度方式如下所示:

代码语言:javascript
复制
ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(sensibleThreadCount);
    threadPool.scheduleAtFixedRate(new Runnable() {

    @Override
    public void run() {
       //Pop events from event queue.
       //Do some stuff with them.
    }

    }, initialDelay, period, TimeUnit.X);
票数 1
EN

Stack Overflow用户

发布于 2012-05-31 18:16:34

也许只使用JGroups shared tree来处理按执行时间排序的任务。节点将接受第一个任务并调度定时器,定时器将在给定的时间执行。可以取消任务删除计时器。所以基本上你可以只使用JGroups和简单的java计时器/执行器。

我没有完整读完,但这里有一些proof of concept or maybe even solution

票数 0
EN

Stack Overflow用户

发布于 2012-06-05 21:55:42

java定时器怎么样?

代码语言:javascript
复制
import java.util.*;

public class MyTask extends TimerTask{
   public void run(){
       System.out.println( "do it!" );
   }
}

然后

代码语言:javascript
复制
Timer timer = new Timer();

MyTask job1 = new MyTask();
// once after 2 seconds
timer.schedule( job1, 2000 );

job1.cancel();

MyTask job2 = new MyTask(); 
// nach each 5 seconds after 1 second
timer.schedule  ( job2, 1000, 5000 );
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10169537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档