2012-08-13 23 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

相關問題