1

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

  • 第一个从互联网连接获取消息并将这些消息插入数据库。这是为了快速稳定而设计的,不做任何其他处理

  • 第二个对自上次运行以来到达的任何新消息执行批处理。

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

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

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

4

2 回答 2

2

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

使用 MSMQ 的美妙之处在于,一个或另一个服务可以关闭,但队列会上升,因此您可以继续处理。

于 2009-01-28T17:58:12.113 回答
1

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

对于这么简单的事情,MSMQ 有点重量级。然后,您也可以使用 MSMQ 并完全摆脱该数据库。 将是做到这一点的方法。

于 2009-03-08T18:49:23.577 回答