我的過程如下:我應該如何從數據庫表中實現多線程隊列?
- 用戶登錄到Web應用程序,這降低了進入UserQueue表
- Windows服務調查此表每x秒和處理每個項目
- 一旦處理項目從UserQueue表
這一切工作很好地順序處理,但我擔心的是一個長時間運行的任務可以阻止所有其他用戶的隊列中刪除(這將是Web應用程序的問題)。
我認爲.NET中的BlockingCollection可以將內容保存在內存中,然後處理它們,但我無法保證UserQueue表中的行不會多次放入該集合中(由於非唯一BlockingCollection的性質),除非我使用數據庫標誌(例如BeingProcessed = true)。我不喜歡數據庫標誌,因爲如果我的服務因任何原因被停止,它可能會在表中存在未處理的項目,其中BeingProcessed = true。
有沒有更多的標準方法來解決這個問題,我錯過了,或者我應該考慮Quartz.net還是類似的?
此答案可能會對您有所幫助:[http://stackoverflow.com/questions/2177880/using-a-database-table-as-a-queue](http://stackoverflow.com/questions/2177880/using -a-database-table-as-a-queue) – 2011-12-30 21:44:23
更標準的方法是使用適當的消息隊列(比如msmq)。我認爲你的做法被稱爲貧民窟隊列。 – keni 2011-12-30 21:45:36
同上@keni。 [RabbitMQ](http://www.rabbitmq.com/devtools.html#dotnet-dev)特別容易設置和使用。 – TrueWill 2011-12-30 21:59:15