Microsoft服务间通信问题

时间:2009-01-28 17:32:44

标签: windows-services msmq message-queue

我目前正在构建两个Windows服务:

  • 第一个从互联网连接接收消息并将这些消息插入数据库。这是为了快速稳定而不进行任何其他处理

  • 第二个执行批处理,其中包含自上次运行以来已到达的任何新消息。

我正在尝试一种方法,以便第二个服务只在新消息准备好处理时运行其批处理过程,如果第二个服务错误,第一个服务将继续运行,反之亦然。目前它每5秒使用一次循环。

我目前正在考虑使用消息队列,其中第一个服务仅在队列为空时才写入消息,第二个服务将查看队列是否包含任何消息,如果没有进入异步等待直到消息到达然后删除消息并运行。因此,使用队列不是真正的队列,而是作为二进制交换机,当状态发生变化时会导致事件被触发到第二个服务。

我认为有一种更好的方法可以做到这一点,我没遇到过,有人可以指点我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

实际上,您的方式确实我将如何为这些结果实现此功能。使用MSMQ,您不必检查是否有消息写入队列,第一个服务只是写入队列,第二个服务只是从中读取以处理它(当它处于活动状态时)。 / p>

使用MSMQ的好处是可以关闭一个或另一个服务,但队列将会启动,因此您可以继续处理。

答案 1 :(得分:1)

在我看来,就像这种情况一样,你所需要的只是一个邮箱。第一个服务存储到数据库中,然后发送“待办事项”消息。另一个只是等待入站消息。

对于这么简单的事情,MSMQ有点重量级。然后你可以再次使用MSMQ并完全摆脱那个数据库。 就是这样做的。