4

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

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

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

4

3 回答 3

1

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

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

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

于 2012-08-13T02:18:19.750 回答
0

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

于 2012-08-13T11:02:00.203 回答
0

您可以让 Postfix 将所有或任何电子邮件发送到外部程序,您可以将它们扔到任何您想要的地方。可以在此处找到一些示例。

于 2014-09-08T13:11:03.577 回答