2014-12-30 73 views
0

处理多个JMS事件的最佳实践是什么,可能在短时间内以序列的形式到达,例如几毫秒。例如,要在同一组来处理我目前的事件侦听器的长相像下面的回调,批处理事件处理中的JMS事件

public void onMessage(final Message msg) { 
     process(msg); 
    } 

序列通常是由单个用户操作触发和需要。我正在实施移动服务器的PUSH引擎,所以我不能以固定速率安排一些命令并延迟很长时间。对于批处理事件处理也是可以容忍的,这也是更有效的。

谢谢!

+0

我能看到的唯一解决方案是拥有一个队列来保存传入的JMS消息,并且有一个调度程序以快速的速度出队。它很贵吗?似乎非常嘈杂。 –

+0

这就是我最终做的事情,只用一个线程执行程序来安排缓冲的JMS消息按固定速度的批处理。 –

回答

0

经过一些调整,而不是以固定的速率调度周期性批量处理,我最终在回调期间以短暂的延迟安排了一个任务。这为所有相关事件提供足够的时间到达缓存。一旦缓存中的所有事件都被批量处理,缓存将被清除,因此不需要处理以下计划任务(每个回调期间计划一个任务)。一旦缓存被再次填充,任务将恢复处理。

当然,缓存需要做成线程安全的。我认为这种方法对于我的场景来说效果最好,短时间的事件序列以不规则的速度到达。