近实时 pub/sub 发送电子邮件和 http 请求的解决方案

Near real-time pub/sub solution sending emails&http requests

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

选项如下:

  1. 在网络中使用 .NET 静态事件 api [不喜欢那个,因为它 不可扩展]
  2. 使用 MSSQL 数据库保存消息,然后使用一些服务作为 processor/sender [这个扩展但我担心 SQL 服务器和连接性能一旦负载上升]
  3. 使用 Redis/RabbitMQ/etc 作为队列,然后再次让服务充当 processor/sender...[那些我没有经验]

要求是:

  1. 应该能够在峰值时间内每秒处理约 100 个 HTTP 请求(每个请求都非常轻量级并且需要很短的时间)
  2. 应该是可扩展的,所以当我添加新的网络应用程序服务器时,一切正常
  3. 域事件(实体状态已更改)和 email/http 发送请求之间的延迟应小于 10 秒
  4. 应该有一个选项可以将消息租给处理器,这样如果处理器延迟失败它可以重试

将不胜感激任何 thoughts/ideas/experiences/points 好的方向。

谢谢!

(更新) 我实际上认为我使用 'subscribers' 这个词是错误的,因为它在这种情况下可能意味着不同的东西。因此,当我说 'potential subscribers' 时,我指的是想要接收电子邮件通知的实际用户,并不是指实际处理队列条目的不同进程(例如,windows 执行实际电子邮件发送的服务)。

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

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

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

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

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