我有.net Windows服務,它從文件夾獲取圖像文件列表並進行一些轉換並將轉換後的文件發送到另一個目錄。我想通過添加serVice的另一個實例來觀察相同的文件夾來獲得更多的吞吐量。我想要2個實例獨立處理文件,而無需重複處理。 可以使用哪些模式? 文件鎖定是否適用於此? 不想使用數據庫或任何其他消息傳遞平臺。 我可以使用文本文件等創建同步如果需要。Windows。服務多個實例處理來自同一個單一目錄重複的文件
0
A
回答
1
如果使用.net,我會考慮創建多個線程(在.net中使用TPL),這將用於並行處理文件。通過這種方式,您可以擁有一個可以控制整個流程的流程。因此,不需要跟蹤什麼進程(exe)正在處理文件,沒有數據庫,沒有鎖定等。
但是,如果您希望有多個進程處理文件,則同步處理的一個選項是利用互斥體。
我會使用此選項以及解決方案1. I.e.在一個服務中使用TPL(多線程)。還使用互斥體。這樣你就有了多個線程和多個服務的好處。希望這是你所追求的。
https://msdn.microsoft.com/en-us/library/bwe34f1k(v=vs.110).aspx
處理任何文件之前,創建一個互斥與特定的名稱,如果所有權已被授予,然後繼續處理文件。如果沒有授予所有權,則可以安全地假定另一個進程或另一個線程(在同一個應用程序中)已獲得對此Mutex的鎖定,這意味着另一個進程/線程正在處理該文件。
示例代碼:
var fileMutex = new Mutex(true, "File Name", out mutexWasCreated);
if (mutexWasCreated){
//Some other process/thread is processing this file, so nothing to do
}
else {
//Start processing the file
}
如果一個服務(EXE)下降,那麼線程會死,這意味着將被釋放的互斥體和這些文件將可用於處理由另一個進程。
+0
我們也試圖通過重複來實現高可用性...一個服務停止其他可以繼續處理..... – AlphaDeltaOmega
相關問題
- 1. Windows服務:同一個服務類的多個實例?
- 2. Quickfix處理來自多個服務器的同一會話
- 3. 如何安裝同一個windows服務的多個實例
- 4. 重用一個工作者實例來處理幾個任務
- 5. 單個服務器中的同一戰爭文件的多個實例
- 6. knitr能處理同一目錄中的多個.Rmd文件嗎?
- 7. Apache重寫規則與來自同一個虛擬目錄的多個文件?
- 8. 寫一個批處理文件來重複複製文件
- 9. 同一vim服務器實例的多個x-windows
- 10. 有一個問題,在Windows服務處理多個文件一次用FileSystemWatcher的
- 11. 複製目錄,並從一個Windows服務器到另一個
- 12. 處理多個文件與程序的一個實例
- 13. 停止同一服務的多個實例的服務
- 14. Spring批處理jobOperator - 如何控制來自同一個XML文件的作業的多個併發實例?
- 15. 一個映射器或一個reducer來處理一個文件或目錄
- 16. WCF,處理來自多個服務器的同時請求
- 17. 單個服務的多個實例
- 18. 一個簡單的windows批處理文件來運行java
- 19. 調用Process.Start從一個Windows服務產生多個實例
- 20. Android小部件和處理來自多個實例的點擊
- 21. 創建一個批處理文件,以從多個服務器
- 22. 同一個WCF服務的多個實例?
- 23. 多個.dockerignore文件在同一目錄
- 24. 管理同一服務的實例
- 25. Node.js將文件從多個目錄複製到一個目錄
- 26. 多臺服務器或一個服務器來處理來自多個客戶端的請求
- 27. 將文件從一個目錄複製到另一個目錄的批處理文件
- 28. 如何接收同一個收件箱中的郵件來自多個服務器實例
- 29. 在同一個txt文件中保存多個條目(Windows服務控制)
- 30. 批處理文件到多個目錄
我們正在嘗試通過重複來實現高可用性...一個服務下其他可以繼續處理 – AlphaDeltaOmega
是否可能發生?比如說,整個操作系統崩潰了嗎?您是否考慮過將服務配置爲自動重啓,或者讓看門狗服務根據需要重啓它? ...但是,是的,文件鎖定可能是你所需要的。 –