FileSystemWatcher与MSMQ.选择什么

本文关键字:什么 选择 MSMQ FileSystemWatcher | 更新日期: 2023-09-27 18:27:47

我有一台服务器,很快就会开始接收文件。这些文件将被放在一个文件夹中。我必须一次读取文件并将数据保存到上的数据库中。我可以使用FileSystemWatcher来监视文件夹,然后在观察者找到新文件时处理文件吗?或者我应该也使用MSMQ,以便在观察者找到新文件后将文件放置在队列中?使用MSMQ是不是太过分了?MSMQ是一个很好的东西,但只要观察程序一次只处理一个文件,那么我不太确定是否真的有必要使用MSMQ。FileSystemWatcher是否足以确保一次只处理一个文件?如果文件处理失败,文件仍将在文件夹中,因此不会丢失。所以基本上我必须在这两种型号之间做出选择:

传入文件->文件放在文件夹中->观察者看到文件->代码隐藏观察者读取文件并将其保存到数据库->观察者返回文件夹等待新文件。

传入文件->文件被放置在文件夹中->Watcher看到文件->Watcher将消息(包含文件的路径)放在队列中,然后返回查看文件夹->QueueWatcher看到消息,从路径中读取文件并将数据保存在DB中->QueueWatcher重新运行以侦听队列中的新消息。

FileSystemWatcher与MSMQ.选择什么

需要记住的一件事是,您的系统是否会在短时间内接收到大量文件。如MSDN文档中所述:

"如果在短时间内有很多更改,缓冲区可能会溢出。这导致组件丢失对目录中的更改的跟踪,它只会提供一揽子通知。增加的大小具有InternalBufferSize属性的缓冲区是昂贵的,因为它来自无法交换到磁盘的非分页内存,因此保持缓冲区足够小但足够大,不会错过任何文件更改事件。"

因此,如果是这种情况,您可能希望使用不同的方法,比如使用服务进行轮询,并记录已处理的文件。

仅尝试FileSystemWatcher。如果这还不够,那么您可以扩展您的解决方案。奥卡姆的剃刀还立着。

我也有类似的问题需要解决。在使用FileSystemWatcher之后,我对其进行了更改,以便系统的文件写入部分通过TCP套接字发送一条明确的消息来通知另一方新文件已经准备好。

我不知道你是否可以改变转会的这一边,所以这可能不能解决你的问题。

根据我的经验,MSMQ比使用FileSystemWatcher的C#编写的windows服务更复杂、更难开发、更难维护。

但我更喜欢另一种方式:通过触摸web服务通知文件服务器新文件已经到达。