2012-08-13 17 views
3

我正在寻找一种方法来接收入站SMTP消息,并将它们放到AMQP代理上以供进一步路由和处理。邮件实际上不会在邮箱中结束,而是将SMTP用作邮件网关。将原始SMTP消息发送到AMQP代理

我已经在Python中编写了一个Postfix After-Queue内容过滤器,用于将入站SMTP消息放入RabbitMQ代理。这很好 - 我通过一个队列获得原始消息,消费者可以很好地找到它。问题是AMQP连接是随每条消息一起创建和拆除的......内容过滤器脚本每次都从头开始重新执行。我想这最终会成为一个性能问题。

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

回答

1

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

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

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

+0

这是一个很好的观点......我想知道AMQP结构/拆卸与HTTP构造/拆卸之间的时差是什么。没有涉及SSL,交换(应该)已经构建,所以它可能不是一个大问题。只是试图挽救我的继任者不利于做出错误的决定;)并不真正关心Python ......在Sinatra找到这样的事情。 – DeckerEgo 2012-08-13 13:24:06

0

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

+0

我认为,如果电子邮件到达邮箱,那肯定是一条路。但是,他们的目标是永远不会打到邮箱 - 而是直接从SMTP接受到经纪人。 – DeckerEgo 2012-08-13 13:22:33

相关问题