我知道如何使用FileSystemWatcher
类,我知道如何发送我想发送的消息。我无法弄清楚的是在哪里初始化FileSystemWatcher
。
我假设有一些地方可以初始化Endpoint
我可以设置它,但我不确定它会在哪里。
这似乎是一个常见的用例;我有点意外的是,Udi没有把它建成NServiceBus!
答案 0 :(得分:2)
是的,内置于NServiceBus。
您需要实现一个派生自IWantToRunWhenBusStartsAndStops
的类
有关详细信息,请参阅http://docs.particular.net/nservicebus/the-nservicebus-host#custom-initialization-and-startup。
答案 1 :(得分:0)
我将尝试以下操作并告诉您它是否有效:
一个。静态布尔变量' keepChecking'
湾一个静态方法watchFiles(),它启动FileSystemWatcher,然后通过测试keepChecking的循环保持活动
湾OnChange等FileSystemWatcher事件处理程序 - 在被FileSystemWatcher触发时,可能会发出NServiceBus事件
启动观察程序(在我的NSB主机程序中)您在一个继承自IWantToRunWhenBusStartsAndStops的入门类中的单独线程中运行WatchFiles()方法。
要停止观察者,首先将watcher.EnableRaisingEvents设置为false,然后将keepWatching设置为false,以便循环结束。
此StackOverflow问题中的类似方法包含代码: 来自泰勒日的NServicebus with File System Watcher。
除了他将starter类与filewatcher类以及在同一线程中运行的(非静态)创建方法统一起来。有趣的是,它可以在不需要keepalive循环的情况下工作,因为FileSystemWatcher事件订阅被定义为静态。
他被告知这不是最佳方式,并给出了两个建议:a。使用"卫星类"或b。要将整个事物移动到单独的类,使fileWatcher本身是静态的。没有提到keepalive循环。我也会尝试一下。