【问题标题】:Sending raw SMTP messages to an AMQP broker将原始 SMTP 消息发送到 AMQP 代理
【发布时间】:2012-08-09 06:36:34
【问题描述】:

我正在寻找一种方法来获取大量入站 SMTP 消息并将它们放到 AMQP 代理上以进行进一步的路由和处理。消息实际上不会进入邮箱,而是使用 SMTP 作为消息网关。

我用 Python 编写了一个 Postfix 队列后内容过滤器,它将入站 SMTP 消息丢弃到 RabbitMQ 代理。效果很好 - 我通过队列获取原始消息,并且它被消费者很好地拾取。问题是每条消息都会创建和拆除 AMQP 连接......内容过滤器脚本每次都会从头开始重新执行。我想这最终会成为性能问题。

如果我可以利用可重入的东西,我可以重用连接。或者也许我只是错误地处理了整个事情......

【问题讨论】:

    标签: python smtp rabbitmq postfix-mta amqp


    【解决方案1】:

    您可以让 Postfix 提供您的所有或任何emails to an external program,您可以将它们扔到任何您想要的地方。 Some examples can be found here.

    【讨论】:

      【解决方案2】:

      使用 SwiftMQ。它有一个JavaMail bridge,它从 IMAP 或 POP3 帐户接收您的电子邮件,将其转换为 JMS 消息,然后可以由 AMQP 0.9.1 and/or AMQP 1.0 和 JMS 客户端使用。

      【讨论】:

      • 我认为如果电子邮件到达邮箱,那肯定是要走的路。但是,他们的目标是永远不要访问邮箱 - 而是直接从 SMTP 接受到代理。
      【解决方案3】:

      通过普通 TCP 建立 AMQP 连接非常快。或许如果您使用 SSL,那就是另一回事了,但您确定将原始消息排入 AMQP 交换队列会成为瓶颈?我的猜测是,实际上通过 SMTP 传递消息会慢得多,所以排队的速度不会影响系统的吞吐量。

      如果这部分确实成为瓶颈,我更喜欢使用 Sinatra 或 Rack 创建小型 Web 服务器,但听起来您可能更喜欢基于 Python 的解决方案。让 postfix 内容过滤器使用 curl 对 Web 服务器执行 HTTP POST,该服务器保持与 AMQP 服务器的持久连接。

      当然,现在您需要考虑监控、错误处理和安全性的额外活动部分。

      【讨论】:

      • 这是一个很好的观点......我想知道 AMQP 构造/拆卸与 HTTP 构造/拆卸之间的时间差是多少。不涉及 SSL,并且(应该)已经构建了交换,所以它可能不是一个大问题。只是想把我的继任者从错误的决定中拯救出来;)真的不在乎 Python……找 Sinatra 来做这件事。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      相关资源
      最近更新 更多