我有一個在開發人員機器和我的開發環境中工作得很好的NServiceBus配置。使NServiceBus丟失消息的東西
但是,當我將它移動到我的測試環境時,我的消息剛剛開始丟棄。
這裏是系統:
- 應用程式從大型機系統獲得一個TCP消息,並把它發送到一個MSMQ(稱之爲
FromMainframe
)。 - 在IIS中託管的應用程序具有該「MSMQ」的「處理」方法並處理來自大型機的消息。
在我的測試環境中,第二步只發生了一半。該消息從MSMQ彈出,但未由我的應用程序處理。我的數據是LOST! NServiceBus將它們從隊列中移除,但我從來沒有去處理它們。他們甚至不在錯誤隊列中!
這些都是我在試圖嘗試事情弄清楚發生了什麼事:
- 檢查配置文件
- 安裝遠程調試的過程看
Handle
方法是什麼做- 從來沒有調用
Handle
方法(但是當我附加到開發環境中我的斷點在我的Handle
方法被擊中,它的一切都完美無缺)。
- 從來沒有調用
- 重新部署我的dev版本的測試Envioronment並再次嘗試第2步(以防萬一的版本是不完全一樣的。)
- 檢查配置再次文件
- 檢查錯誤隊列不是填滿
- 錯誤隊列保持爲空(我希望它會填滿,然後我的數據不會丟失)。
- 檢查可以從我的MSMQs
- 拉東西的任何其他過程中,我關閉了我的IIS網站,並在
FromMainframe
隊列開始到備份的消息。 - 當我重新打開時,消息消失相當快(但仍然不是全部消失)。他們消失的速度太快,他們不能通過我的
Handle
方法進行處理。
- 拉東西的任何其他過程中,我關閉了我的IIS網站,並在
- 再次檢查配置文件。
- 運行NServiceBusTools \ MsmqUtils \ Runner.exe \我
- 我跑了,重新啓動,一次又一次地跑了它的好辦法!
- 再次檢查配置(我一定錯過了SOMETHING吧?)
- 檢查開發環境CONFIGS沒有指向測試環境
- 我不認爲這是可能使用另一臺計算機的MSMQ作爲輸入隊列,但它不傷害檢查。
- 尋找任何可能會悄悄地殺死我的消息的catch塊。
- 最後一次檢查配置文件。
- 在另一臺機器上重新創建我的測試環境(它工作完美)
- 在IIS之外運行我的東西。
- 當我主機以外的IIS(使用NServiceBus.Host.exe)它一切正常。所以它必須是一個IIS的東西嗎?
- go crazy並希望堆棧溢出可以提供任何種類的見解。
是NSB託管在IIS內?它配置了哪些協議?你的隊列是交易嗎? MSDTC已啓動並正在運行嗎?應用程序池標識是否在隊列上具有正確的權限?消息是否在系統死信隊列中結束? – 2012-03-19 23:42:27
您是否配置了log4net來捕獲所有nservicebus輸出?你的答案可能在那裏。還有哪個版本的nservicebus? – Sarmaad 2012-03-20 04:27:30
@AdamFyles - NSB在IIS中託管。我需要檢查協議(我認爲這不會影響NSB)。我的MSMQ由NSB設置。所以我會認爲這是事務性的。應用程序池具有正確的權限。這些消息不會在死信隊列中結束。 (他們剛剛離開) – Vaccano 2012-03-20 16:35:26