2009-01-28 110 views
1

我目前正在建设两个窗口服务:Microsoft服务互联互通问题

  • 首先从互联网连接需要的信息,然后将这些存入数据库。这被设计为快速和稳定,并且不做任何其他处理

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

我试图想办法,这样,当新邮件准备处理的第二个服务将只运行它的批量处理,如果第二服务失误的第一个服务将继续下去,反之亦然。目前它每5秒使用一个循环。

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

我认为有没有更好的方法来做到这一点,我没有遇到过,有人请指出我在正确的方向吗?

回答

2

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

使用MSMQ的美妙之处在于其中一个或其他服务可以关闭,但队列将会启动,因此您可以继续处理。

+0

谢谢你的回答casperOne。我已经详细阐述了我的问题。我可能实际上在滥用队列机制,因为我想将消息存储在数据库中,而不是将它们全部存储到队列中,所以将使用队列作为触发事件的二进制开关。这个可以吗? – bobwah 2009-01-29 08:51:44

+0

你可以做那样的事情。当您在队列中发送消息时,您只需发送与数据库中记录的标识相对应的标识。但是,在双方中,您应该包装数据库记录和队列消息的写入以及事务中的接收。 – casperOne 2009-01-29 16:05:22

1

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

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