我正在寻找一种方法来获取大量的入站SMTP消息并将它们放到AMQP代理上以进行进一步的路由和处理.邮件实际上不会以邮箱结尾,而是将SMTP用作邮件网关.
我在Python中编写了一个Postfix后队列内容过滤器,它将入站SMTP消息丢弃到RabbitMQ代理上.这很有效 – 我通过队列得到原始消息,消费者可以很好地接收它.问题是AMQP连接是用每条消息创建和拆除的……每次都会从头开始重新执行内容过滤器脚本.我想这最终会成为一个性能问题.
如果我可以利用重入的东西,我可以重用连接.或许我只是错误地接近整个事情……
解决方法:
通过普通TCP建立AMQP连接非常快.也许如果您使用的是SSL,那么这是另一个故事,但您确定将原始消息排入AMQP交换机将成为瓶颈吗?我的猜测是,实际通过SMTP传递消息的速度要慢得多,所以排队的速度不会影响系统的吞吐量.
如果这件事确实成为瓶颈,我宁愿使用Sinatra或Rack创建小型Web服务器,但听起来您可能更喜欢基于Python的解决方案.让postfix内容过滤器使用curl执行HTTP POST到Web服务器,该服务器维护与AMQP服务器的持久连接.
当然,现在您有一个额外的移动部件,您需要考虑监控,错误处理和安全性.