我正在研究的解决方案需要多个进程,这些进程都是在多个Windows服务中构建的,所有这些服务都是使用运行在.NET.上的C#构建的
- 服务1:提取文件夹中文件中的数据
- 服务2:分析数据并将结果放入图像文件
- 服务3:将图像处理到另一个应用程序中
- 服务4:生成报告
每个服务每小时运行一次。一切都很好。
现在的要求之一是尽可能快地完成所有服务。因此,我希望这些服务能够连续运行。
如何从另一个服务调用一个服务,或者有一个管道一个接一个地运行所有服务。
您可以使用消息队列。我推荐RabbitMQ。这很简单。通过您的业务流,每个服务都侦听其管道/队列。例如,Service1从文件中提取数据,然后向Service2的队列发送消息。Service2获取消息并运行其任务,完成任务后向Service3发送消息…您可以使用RabbitMQ构建类似的流。
您可以使用FileSystemWatcher
并将文件夹用作服务之间的简单队列。还要注意,FileSystemWatcher
可能不是100%可靠的:FileSystemWatcher与轮询以监视文件更改
可能需要设置NotifyFilter
才能获得您想要的行为。
您还可以向服务添加一个互斥对象,它可以检测服务是否已经在运行,并一次性使用文件夹/文件更改。
还有其他更重、功能齐全的消息队列,但对于您的需求来说,这些可能有些过头了。