我正在寻找一种方法来获取大量入站 SMTP 消息并将它们放到 AMQP 代理上以进行进一步的路由和处理。消息实际上不会最终进入邮箱,而是使用 SMTP 作为消息网关。
我用 Python 编写了一个 Postfix After-Queue Content Filter,它将入站 SMTP 消息丢弃到 RabbitMQ 代理上。这很好用——我通过队列获取原始消息,消费者很好地接收了它。问题是每条消息都会创建和断开 AMQP 连接……内容过滤器脚本每次都会从头开始重新执行。我想这最终会成为一个性能问题。
如果我可以利用一些可重入的东西,我就可以重用连接。或者也许我只是错误地处理了整件事......
最佳答案
通过纯 TCP 建立 AMQP 连接非常快。也许如果您使用的是 SSL 那么这是另一回事,但您确定将原始消息排队到 AMQP 交换将成为瓶颈吗?我的猜测是,实际上通过 SMTP 传递消息会慢得多,所以您可以多快地排队并不会影响系统的吞吐量。
如果这篇文章确实成为瓶颈,我宁愿使用 Sinatra 或 Rack 创建小型 Web 服务器,但听起来您可能更喜欢基于 Python 的解决方案。让后缀内容过滤器使用 curl 向网络服务器执行 HTTP POST,该网络服务器保持与 AMQP 服务器的持久连接。
当然,现在您有一个额外的事件部分,您需要考虑监控、错误处理和安全性。
关于python - 将原始 SMTP 消息发送到 AMQP 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927409/