近实时发布电子邮件和http请求的发布/订阅解决方案

时间:2016-04-20 18:30:14

标签: asp.net-web-api architecture publish-subscribe

我正在尝试构建最佳解决方案,以便在我的web api域中发生某些事情时能够发送电子邮件/ http请求。 例如,当某些实体发生变化时,我想向潜在订阅者发送电子邮件/ http通知。

有以下选项:

  1. 在web api中使用.NET静态事件[不喜欢那个 不可扩展]
  2. 使用MSSQL数据库保存消息,然后使用某些服务作为处理器/发送器[这个扩展但我担心SQL服务器和放大器连接性能一旦负载上升]
  3. 使用Redis / RabbitMQ / etc作为队列,然后再次让服务充当处理器/发送者...... [我没有经验的人]
  4. 要求是:

    1. 应该能够在偷看时每秒处理~100个http请求(每个请求都非常轻量级,并且需要很短的时间)
    2. 应该是可扩展的,所以当我添加新的Web应用服务器时,所有工作
    3. 域事件(实体状态已更改)与发送的电子邮件/ http请求之间的延迟应小于10秒
    4. 应该有一个向处理器租用消息的选项,这样如果处理器无法延迟,它可以重试
    5. 感谢任何想法/想法/经验/指向良好的方向。

      谢谢!

      (更新) 我实际上认为我使用“订阅者”一词时犯了一个错误,因为在这种情况下它可能意味着不同的东西。所以,当我说'潜在订阅者'时,我指的是想要接收电子邮件通知的实际用户,我并不是指实际处理队列条目的不同进程(例如,实际发送电子邮件的Windows服务)。

      所以,在这种情况下,我实际上认为我需要一个发布者(web api)和一个订阅者(Windows服务),这让我想到我可能需要队列而不是主题。

1 个答案:

答案 0 :(得分:0)

您是否考虑过主题而不是队列?

RabbitMQ:https://pubs.vmware.com/vfabric52/index.jsp#com.vmware.vfabric.rabbitmq.2.8/rabbit-web-docs/tutorials/tutorial-five-java.html

ActiveMQ:http://activemq.apache.org/how-does-a-queue-compare-to-a-topic.html

将队列挂钩到主题通常非常容易,这样您就可以为那些不在线的应用程序提供持久队列。