我应该使用消息队列来保证Windows服务只能在一个记录上运行吗?

时间:2011-05-05 13:00:25

标签: c# .net msmq

刚刚看到一篇关于消息排队的文章。我有一个服务,每1秒运行一个进程。该过程将名为“ProcessLock”的静态bool更改为true。然后,该过程在执行之前检查此变量是否为true,如下所示:

if (!ProcessLock)
{
    ProcessLock= true;
    //dostuff
}

但是如果这个过程再循环并在括号之后输入另一个线程之后但在将bool更改为true之前输入括号,那么我们就会遇到问题,因为里面的代码会开始运行两次相同的记录。这个条件叫什么?我确定它有一个多线程术语?

无论如何,真正的问题是我可以使用MSMQ来解决这个问题吗?一般来说这个过程是什么?

1 个答案:

答案 0 :(得分:0)

消息传递通常用于确保可靠的传递并放松服务之间的时间耦合。

据我所知,您的服务每次执行时都会对相同的数据进行操作。在这种情况下,消息队列对您没有多大帮助;毕竟,可以并行处理多个消息。您可以将消息处理配置为在单个线程上运行(一次处理一条消息),但简单的锁定可以更轻松地解决此问题。

另一方面,如果您可以为要处理的服务创建工作项,那么某种队列将是有益的。它可以是简单的本地Queue<WorkItem>,如果您不关心可靠性并且不需要进程间通信,则不需要复杂的消息传递基础结构。