我有兩個啓動腳本來運行獨立應用程序。獨立的Spring + Java + JMS
startQueue.sh
用於偵聽JMS消息並將消息存儲到Oracle數據庫表中。startProcess.sh
- 獲取表信息並處理數據並從數據庫中刪除信息並終止。
我的問題是,何時將JMS消息插入到DB中,然後使用定時器自動觸發並處理表信息。
我有兩個啓動腳本來運行獨立應用程序。獨立的Spring + Java + JMS
startQueue.sh
用於偵聽JMS消息並將消息存儲到Oracle數據庫表中。startProcess.sh
- 獲取表信息並處理數據並從數據庫中刪除信息並終止。我的問題是,何時將JMS消息插入到DB中,然後使用定時器自動觸發並處理表信息。
您可以不斷運行第二個應用程序,輪詢數據庫,但我認爲更好的設計是一步完成所有操作 - 接收JMS消息,插入它(如果需要),然後處理它全部在一個應用程序中。
你是對的,灰色。但問題是,在處理數據時,如果出現任何問題,我們不希望從數據庫中刪除數據。我們再次需要獲取並處理數據,直至成功。一旦數據庫沒有任何數據,我們將終止。這個過程會在有數據的數據庫時自動觸發。您能否指導我遵循哪個流程。 – user1941080
閱讀此內容 - http://mikehadlow.blogspot.com/2012/04/database-as-queue-anti-pattern.html然後,如果您仍覺得必須將數據庫用作工作隊列,則唯一的選擇是將會有一個外部進程持續查詢數據庫,看看是否有任何需要處理的東西。 – GreyBeardedGeek
@ user1941080這種情況正在尖叫事務管理。根據消息隊列的功能,您應該能夠刪除消息並在同一個事務中在數據庫中處理消息。如果處理失敗,你可以隨後把消息放入一個死信息隊列中? – flup
您要麼觸發(當插入消息時)或使用計時器,你會如何使用兩者? –
我在這裏沒有看到問題? – eis