我需要跟踪特定时间范围内的某些事件,并在事件数量达到特定数量时采取行动。更详细地说,我连接到外部服务并提交确认状态等于CONF或FAIL的请求。我需要能够监视响应以检测在给定时间范围内是否有不寻常的失败次数,例如, > 3在最后5秒内失败,以便我可以检查错误并采取相应措施。我可以选择检查连续3次失败,但我更喜欢基于时间的方法。Java收集过期条目
我一直在测试番石榴阅读本post后的CacheLoader
但同时条目(我只存储FAIL事件)在Cache中出现的呼叫到期的预期,以size()
(以确定失败的次数)亦包括过期的条目。这似乎是它应该如何工作根据documentation,如果我没有误解的事情?有没有办法从缓存中获取“活动”事件的数量?
我猜想另一种解决方案是使用像Esper这样的CEP框架,但对于我的简单需求来说,它看起来像是矫枉过正和麻烦。有没有人有完全不同的方法来建议,以促进我的要求?由于
你看到什么'EhCache'缓存框架?我建议看看它。我认为解决你的要求。请参阅http://ehcache.org/ – MJM 2012-02-23 13:49:38
我想我不明白这个问题。发送到外部服务。如果错误响应,则添加到带有时间戳的队列中。删除太旧的项目。如果列表长度>阈值,则执行一些操作。如果这种方法证明太慢,那么(并且只有这样)才能优化。一旦优化成为可以使用整数图,其中地图的关键是几秒钟的时间。当你添加一个错误时(使用秒作为键,递增计数),你确切地知道还有哪些其他键可以相加。 – 2012-02-23 14:03:56
@TonyEnnis我不明白常规队列如何解决我的问题。我需要有某种迭代过程来监视和删除不能成为所需解决方案的条目。 – hgus1294 2012-02-23 16:26:05