首先,我正在尋找解決此問題的不同方法。數據庫中的隊列管理
我在我們的應用程序中有一個隊列在數據庫表中維護。 有一個預定的處理器,它將查看隊列並根據記錄上的STATUS字段提取記錄。 它處理這些記錄,併成功從表中刪除記錄。
問題是我的應用程序是聚簇的。因此,將有幾個預定處理器的實例,將拉出相同的記錄,然後處理它們...
要解決這個問題,我遵循的方法是 我更新記錄之前它的狀態(從PENDING到WORKING),並且還在表格的實體映射上添加了一個版本,因此動作的順序爲:
1)查詢表中的PENDING記錄。 2)更新狀態爲WORKING。 (如果處理器的另一個實例在某人已更新記錄時嘗試更新它,則會發出異常,因此將轉移到下一條記錄) 3)成功。刪除記錄,否則將其更新回PENDING。
現在,這樣做會很解決問題,但不很喜歡這個主意......
想找出誰面臨着類似的問題,人們已經解決了。
我有另一種方法來解決這個問題,因爲相同的應用程序填充表,將它分配給填充它的主機,並且該特定tomcat上的計劃處理器僅查找該主機的記錄。基本上要儘量減少第一個解決方案將會發生的顛簸。
它是一個Spring 3.0.5和Hibernate應用
你看了看:ZeroMQ還是Apache Kafka? – eSniff 2012-03-07 00:35:07