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

Posted

技术标签:

【中文标题】发送电子邮件和 http 请求的近实时发布/订阅解决方案【英文标题】:Near real-time pub/sub solution sending emails&http requests 【发布时间】:2016-04-20 18:30:13 【问题描述】:

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

有如下选项:

    在 web api 中使用 .NET 静态事件 [不喜欢那个 不可扩展] 使用 MSSQL db 保存消息,然后使用某些服务作为处理器/发送器 [这个可以扩展,但我担心负载上升后 SQL 服务器和连接性能] 使用 Redis/RabbitMQ/etc 作为队列,然后再次让服务充当处理器/发送者...[那些我没有经验]

要求是:

    应该能够在 peek 时间每秒处理约 100 个 http 请求(每个请求非常轻量级,需要很短的时间) 应该是可扩展的,所以当我添加新的 Web 应用程序服务器时,一切正常 域事件(实体状态已更改)与发送的电子邮件/http 请求之间的延迟应小于 10 秒 应该可以选择将消息租给处理器,以便在处理器延迟失败时可以重试

将不胜感激任何想法/想法/经验/指向好的方向。

谢谢!

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

因此,在这种情况下,我实际上认为我需要一个发布者(Web API)和一个订阅者(Windows 服务),这让我重新思考我可能需要队列而不是主题。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

我没有,因为到目前为止我还没有处理过这样的事情,所以只是不知道什么是最好的选择。从我刚刚阅读的内容来看,主题似乎是很好的建议!谢谢你!另外,你能解释一下你的最后一句话吗?不在线的应用程序的持久队列是什么意思?谢谢 哦,我现在知道我实际上可能没有在我的问题中使用精确的技术。请在原始问题中查看我的更新。谢谢 根据您的更新,我认为选择 #3 是迄今为止您最好的选择。这就是队列的设计目的。持久队列是具有持久数据存储(通常是磁盘或数据库)的队列:这是 Rabbit MQ 的:rabbitmq.com/persistence-conf.html。在另一端监听服务非常简单,您可以在网络上找到很多示例。 太好了,然后我会深入研究该文档。谢谢参考。实现本身并不是我主要关心的问题,因为这就是文档的用途。对我来说,主要的事情是了解对消息数量和处理延迟要求的性能方面的期望。就 RabbitMQ 而言,这些数字是大、小、适中的吗?我会将您的答案标记为答案。谢谢!

以上是关于发送电子邮件和 http 请求的近实时发布/订阅解决方案的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase 函数将实时数据库中的数据发送到电子邮件

实时检索推文并发送带有推文文本的电子邮件

发生一个或多个错误。(发送请求时发生错误)Mailchimp 列表集成

Solr 与 Elasticsearch 的近实时搜索

Django,使用 Mailchimp 列表发送取消订阅的电子邮件

我需要通过组件帖子向 mailchimp 订阅列表发出 http 请求