【问题标题】:Asyncronously send messages to third party systems - queue?将消息异步发送到第三方系统 - 队列?
【发布时间】:2011-10-31 12:49:07
【问题描述】:

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

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

我能想到以下几种可能

  • 将第 3 方消息保存到数据库表中,并让一些工作进程从表中读取项目并发布到第 3 方系统。
  • 使用诸如 nServiceBus 或 RabbitMQ 之类的“适当”消息队列(我对这两种方法都没有经验)

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

谢谢

詹姆斯

【问题讨论】:

    标签: asp.net-mvc notifications queue


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      你应该阅读这个:它解释了如何使用 pub sub 和 RabbitMQ http://www.rabbitmq.com/tutorials/tutorial-three-java.html

      【讨论】:

        猜你喜欢
        • 2023-04-10
        • 1970-01-01
        • 2011-01-18
        • 2016-05-02
        • 2020-09-28
        • 2022-06-10
        • 2011-08-20
        • 1970-01-01
        • 2013-11-15
        相关资源
        最近更新 更多