我試圖爲排隊的消息傳遞系統實現會話上下文數據。異步(排隊)消息傳遞和關聯的會話數據
會話處理過程如下: 前端應用程序對自身進行身份驗證並接收會話標識。 之後,會話標識被包括在消息標題中,所以消息處理程序被提供有用於例如安全檢查和審計日誌記錄。如果客戶崩潰並繼續工作,客戶可能會選擇一個會話。
所以現在我們要將鍵/值對與會話ID關聯起來。但是,如果會話數據發生變化,會產生許多併發問題,因爲消息處理程序使用的會話數據應該是發送消息時的數據。
我看到了兩個可能的解決方案:
- 將相關的會話數據,每一個消息頭
- 商店版本數據庫的會話數據,並在郵件標題中使用的版本號。
第一個使消息更大,第二個使會話數據庫更大並創建大量的基礎結構代碼。我必須將最新的值保存到數據庫中,所以如果客戶端崩潰或連接丟失,客戶端可能會繼續工作。
還有其他解決方案嗎?我傾向於使用第一種解決方案,但希望首先獲得一些反饋。
其他人如何處理這個問題(例如JMS/NServiceBus/Masstransit)?
根據答案更新: 我選擇了說服我的團隊成員僅在前端使用會話數據並將其放入消息中(如果消息處理程序需要)。
你對消息架構是正確的。會話數據應該保留在前端並且僅存儲用於恢復。將相關業務數據放在標題或外部會話數據庫中是錯誤的。 – sanosdole 2011-12-16 16:20:18