【发布时间】:2010-11-14 22:52:16
【问题描述】:
我有一个 Windows 服务 可以进行一些图像转换。它通过在任何文件(在特定文件夹中)被重命名(即重命名文件观察程序)时触发来工作。效果很好,直到我在该文件夹中转储(并重命名)大量图像。 CPU红线等。
所以,我打算更改我的代码以使用 MSMQ 来排队所有需要转换的文件。美好的。每次重命名文件并触发文件观察程序时,我都会向队列中添加一条新消息。邱尔。
问题是这样的 -> 我如何一次从队列中获取一条消息?
我是否需要创建一个每 xxx 秒轮询一次队列的计时器对象?或者有没有办法不断地偷看队列中的第一个项目。一旦消息存在,提取它,处理它,然后继续(这意味着,继续偷看直到世界爆炸)。
我想知道我是否只需要在 Receive 方法周围放置一个 while 循环。伪代码如下(在编辑#2中)...
谁有这方面的经验并有一些建议?
非常感谢!
编辑:
如果 WCF 是要走的路,有人可以提供一些示例代码等吗?
编辑 2:
这是我正在考虑的一些伪代码......
// Windows service start method.
protected override void OnStart(string[] args)
{
// some initialisation stuf...
// Start polling the queue.
StartPollingMSMQ();
// ....
}
private static void StartPollingMSMQ()
{
// NOTE: This code should check if the queue exists, instead of just assuming it does.
// Left out for berevity.
MessageQueue messageQueue = new MessageQueue(".\\Foo");
while (true)
{
// This blocks/hangs here until a message is received.
Message message = messageQueue.Receive(new TimeSpan(0, 0, 1));
// Woot! we have something.. now process it...
DoStuffWithMessage(message);
// Now repeat for eva and eva and boomski...
}
}
【问题讨论】: