簡體   English   中英

如何設計實時警報系統?

[英]How to design a Real Time Alerting System?

當數據庫中的記錄未按指定間隔更新/更改時,我必須發送警報。 例如,如果一小時內未處理收到的采購訂單,則應將提醒發送給交貨經理。

提醒/警報應准確發送間隔(包括秒)。 如果最后修改時間是13:55:45,則警報應在14:55:45觸發。 可能需要跟蹤一百萬行。

簡單的方法可能是實現自定義調度程序,並且所有記錄都將在其中注冊。 但是應該每秒查詢一次數據庫以查找更改,這將導致性能問題。

更新:

另一種基本方法是為每個記錄創建一個線程,並將其置於睡眠狀態1小時(或)使用具有超時功能的排隊概念。 但仍然存在性能問題

有更好的方法來實現相同的想法嗎?

可能使用內部JMS隊列將是更好的解決方案-例如,您可能要使用計划的消息功能http://docs.jboss.org/hornetq/2.2.2.Final/user-manual/en/html/examples.html# hornetq的examples.scheduled消息

您可以要求經紀人在正好1小時后發布警報消息。 另一方面,在處理某些交易活動時,您可以手動刪除此消息,表示該交易活動已被正確處理。

為每個提醒使用計時器。即,如果最后修改的時間是17:49:45,則應該在18:49:45觸發警報,只需為每個將在一個小時后調用的任務創建一個動態計時器時間表。

如果您真的堅持“實時性”,那么在Java中是不可能的。 在Java中,您可能會使垃圾回收器的進入世界的階段陷入困境,並且您永遠無法保證確切的時間。

如果大約時間也是允許​​的,則使用其他答案中建議的某種計划的隊列,如果不允許,則使用實時Java或某些本機調用。

如果我們可以假設輸入的訂單時間增加,那么:

您可以對具有屬性time-of-orderorder-id元素使用Queue

添加到數據庫的每個新條目也都排隊到此Queue

您可以每分鍾在Queue開始處檢查一次元素。

Queue的開頭檢查元素時,如果距離time-of-order過去了一個小時,則在數據庫中搜索具有order-id的條目。

如果找到並且未更新,則發送通知,否則從Queue中將其出隊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM