Web应用程序订阅了消息队列

时间:2011-08-03 08:30:22

标签: .net asp.net web-services architecture messaging

Web有(1) Web应用程序,其中用户创建一些任务;(2)其他系统(基于Java的服务)处理任务。

任务取决于日期/时间 - 用户创建任务,将其开始日期设置为例如明天凌晨1点,他完成了。明天凌晨1点的Java服务开始处理任务,并将处理的当前状态报告给应用程序。

我们计划使用ActiveMQ(a)通知服务新任务,(b)通知Web应用程序当前任务状态。 (a)部分没有问题。

我的问题是 - (b)好主意? Web应用程序必须订阅消息队列,以便在有消息报告当前任务进度时调用它。 Web应用程序应该处理它并将信息存储在db中  我怀疑我们应该以这种方式做到这一点,因为如果网络应用程序没有流量,就会死掉,因此订阅者。因此不会处理消息。

创建永久连接到队列的.NET服务是否更好?在Web应用程序中订阅的优点是,如果我们需要在Nhibernate中使用二级缓存,一切正常。
如果有两个使用Nhibernate和二级缓存的进程(Web应用程序,新服务),这可能会导致问题,因为每个进程都可以对不同的数据进行操作。


报告可以通过普通的Web服务完成,但同事们报告说,通过wcf从java到.net进行通信并使用证书进行安全通信非常复杂。

2 个答案:

答案 0 :(得分:1)

我们做了类似的事情,并使用消息队列来保存需要在不同服务中执行的任务,如果服务终止,消息队列继续被写入,我们不会写入sql服务器,因为我们使用一台不同的机器,也可以下来

我们没有订阅队列,我们​​只是打开并弹出消息,如果有任何消息,基于计时器,我们发现这更可靠,我们可以设置时间

答案 1 :(得分:0)

我们已经建立了类似的系统,在我们的例子中,我们做的略有不同。

  • 我们使用的是表而不是队列。这使我们能够在处理项目时进行记录,并通过将状态更改为“未发送”来重新发送
  • 我们还使用计时器服务轮询该表,而不是触发通知

通知问题是,如果在发出通知时应该监听通知的系统停机,会发生什么。