java - 如何设计实时警报系统?

标签 java algorithm large-data-volumes

我有一个要求,当数据库中的记录在指定的时间间隔内没有更新/更改时,我必须发送警报。例如,如果收到的采购订单未在一小时内处理,则应将提醒发送给送货经理。

提醒/警报应该准确地在间隔(包括秒)发送。如果最后修改时间是 13:55:45 意味着,应该在 14:55:45 触发警报。可能需要跟踪数百万行。

简单的方法可以是实现自定义调度程序,所有记录都将注册到它。但是应该每秒轮询数据库以查找更改,这会导致性能问题。

更新:

另一种基本方法是为每条记录创建一个线程并使其 hibernate 1 小时(或)使用一些具有超时的排队概念。但它仍然存在性能问题

有没有更好的方法来实现相同的想法?

最佳答案

可能使用内部 JMS 队列会是更好的解决方案 - 例如,您可能想使用计划消息功能 http://docs.jboss.org/hornetq/2.2.2.Final/user-manual/en/html/examples.html#examples.scheduled-message与 hornetq。

您可以要求经纪人在正好 1 小时后发布警报消息。另一方面,在处理某些交易 Activity 期间,您可以手动删除此消息,这意味着交易 Activity 已无误处理。

关于java - 如何设计实时警报系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753592/

相关文章:

java - 验证两个字符串

java - 什么是NullPointerException,我该如何解决?

java - 如何使用 jackson 将 JSON 数组反序列化为 HashMap?

java - 移动网络应用程序的表单字段中的文件上传

string - 比较字符串的相似性?

python - 对列表进行排序,其中某些值保持在固定位置

sql - RDBMS的实际大小限制

Ruby - 在另一个长度未知的数组中均匀分布和交错/交织一个数组的元素

JDBC批量插入OutOfMemoryError

mysql - 将 mysql 表转储到 CSV(stdout),然后将输出隧道传输到另一台服务器