异步发送消息到第三方系统 - 队列?

时间:2011-10-31 12:49:07

标签: asp.net-mvc notifications queue

我们有一个ASP.NET MVC Web应用程序,允许用户将消息发布到网站上。除此之外,用户还可以在发布消息时将该消息内容联合到其他第三方系统。

目前,这是同步完成的,因此当他们点击“发布”按钮时,我们会将他们的消息保留到数据库中,然后依次通知每个第三方系统。我们需要提高此操作的可伸缩性和持久性,因此我希望以某种方式使操作的通知方面异步。

我可以想到以下可能性

  • 将第三方消息保存到数据库表中,并让一些工作进程从表中读取项目并发布到第三方系统。
  • 使用某种类型的“正确”消息队列,如nServiceBus或RabbitMQ(我没有任何经验)

有更好的方法吗?我特别感兴趣的是如何通知用户消息已被正确联合(因为它是异步的)以及如何处理多个重试失败,此时发送者应该放弃。

由于

詹姆斯

2 个答案:

答案 0 :(得分:1)

NServiceBus是一个实现异步通信的好框架。如果您将它用于此用例,您将看到许多其他应用消息传递的机会,以提高系统的可伸缩性和可靠性。

创建在将消息持久保存到数据库后发布的MessagePosted事件消息。对于可能通知消息的每个第三方系统,创建一个实现IHandleMessages的事件处理程序类。

NServiceBus促进了多次重试失败,如果出现问题,只需在事件处理程序中抛出异常。在事件移动到错误队列之前,事件将重新提交给事件处理程序以进行可配置的重试次数。

要通知用户,您可以创建一个状态视图或窗口小部件,其中显示最新消息的通知结果。如果无法通知第三方系统,您可以考虑向用户发送电子邮件,以便他可以采取行动。

使用此发布订阅示例快速加快速度:http://docs.particular.net/samples/pubsub/

答案 1 :(得分:0)

您应该阅读:它解释了如何将pub子与RabbitMQ http://www.rabbitmq.com/tutorials/tutorial-three-java.html

一起使用