2012-02-14 356 views
1

後我目前在建設,通過一個基本的Web服務收到數以千計的小消息的應用程序的過程中,消息發佈到消息隊列(RabbitMQ的)。該應用程序使用StructureMap作爲其容器的Dependancy Injection。恢復資源的錯誤

我有消耗的消息隊列和仍然存在的消息發送到數據庫(SQL Server)的一個獨立工作者應用。

我已經實現了SQL連接和RabbitMQ的連接爲單身(線程局部)。

在一個理想的世界裏,這一切工作正常,但如果SQL Server或RabbitMQ的連接中斷,我需要重新打開它,或可能部署和重新創建/重新連接資源。

我寫了一個基本類,作爲一個工廠,在它返回資源之前,檢查它是連接/打開/工作,如果沒有,處置它並重新創建它 - 我不確定這是否是「最佳實踐「或者如果我試圖解決已經解決的問題。

任何人都可以提供關於如何實現長時間運行的任務的建議,這些任務執行大量小任務(在我的情況下是單個INSERT語句),不需要爲每個任務實例化對象,但可以從錯誤中正常恢復作爲丟失的連接?

RabbitMQ的連接似乎是昂貴的,並且在高負荷的工作,我可以迅速耗盡手柄,所以我想重複使用(每線程)相同的連接。

回答

0

您可以爲具有連接池的RabbitMQ建立連接工廠。它將負責分配連接到任務。你應該檢查一下連接是否正常。如果沒有,則啓動一個新線程,關閉/清理連接,然後將其返回到線程池。同時返回到用戶的功能連接。

這聽起來很複雜,但它是難以初始化資源的模式。