爲了簡化我的問題,我有春/ RabbitMQ的:事務管理
應用1與@Transactionnal方法的createUser():
- 插入數據庫中的新用戶
- 在RabbitMQ的添加異步消息以便用戶收到通知郵件
- (可能有一些額外的代碼,但不多)
應用2與RabbitMQ的消息consummer
- 在實時的郵件隊列Consummes信息數據庫
- 讀取郵件內容發送郵件
的問題是,有時, App2甚至在App1上提交事務之前,App2會嘗試使用RabbitMQ消息。這意味着App2無法讀取數據庫上的郵件數據,因爲用戶尚未創建。
一些解決方案可能是:
-
上應用2
- 使用READ_UNCOMMITED隔離級別
- 添加在RabbitMQ的消息傳遞一定的延遲(或在consummer一些RetryTemplate)
- 改變我們發送電子郵件的方式...
我見過有一個在Spring的RabbitTransactionManager,但我不明白它應該如何w掃。事務處理內部的東西似乎總是有點難以理解,文檔也沒有太多幫助。
有沒有辦法做這樣的事情?
- 添加消息到隊列的RabbitMQ在@Transactionnal方法
- 當事務結束,該消息將提交給隊列,並且改變將提交給數據庫
- 所以該消息數據庫交易結束前無法完成
怎麼樣?而且,如果我發送同步RabbitMQ消息而不是異步消息,則需要做些什麼呢?它會阻止等待響應的線程嗎? 因爲我們爲不同的用戶發送同步和異步消息。
我說得對,這兩個應用程序使用來自同一隊列中的消息? – pinepain
沒有,應用1將消息隊列中,應用2在該隊列 –
你管理以某種方式解決這個問題消耗的消息?我面臨同樣的問題。 –