Asp.net mvc 异步向第三方系统发送消息-队列?

Asp.net mvc 异步向第三方系统发送消息-队列?,asp.net-mvc,notifications,queue,Asp.net Mvc,Notifications,Queue,我们有一个ASP.NET MVC web应用程序,允许用户将消息发布到网站上。除此之外,用户还可以在发布消息时将消息内容联合到其他第三方系统 目前,这是同步完成的,因此当他们单击“发布”按钮时,我们会将他们的消息保存到数据库中,然后依次通知每个第三方系统。我们需要改进此操作的可伸缩性和持久性,因此我希望以某种方式使操作的通知方面异步 我能想到以下几种可能性 将第三方消息保存到数据库表中,并让一些工作进程从表中读取项目,然后发布到第三方系统 使用类似nServiceBus或RabbitMQ之类的

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

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

我能想到以下几种可能性

  • 将第三方消息保存到数据库表中,并让一些工作进程从表中读取项目,然后发布到第三方系统
  • 使用类似nServiceBus或RabbitMQ之类的“适当”消息队列(我对这两者都没有经验)
有更好的方法吗?我特别感兴趣的是如何通知用户消息已被正确联合(因为它是异步的),以及如何处理多次重试失败,此时发送方应该放弃

谢谢


James

您应该阅读以下内容:它解释了如何将pub-sub与RabbitMQ一起使用。如果您将其用于此用例,您将看到许多其他应用消息传递以提高系统的可伸缩性和可靠性的机会

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

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

要通知用户,您可以创建一个状态视图或小部件,显示最新消息的通知结果。如果无法通知第三方系统,您可以考虑向用户发送电子邮件,以便他可以采取行动。 使用此发布-订阅示例可以快速了解最新情况: