Отправка необработанных SMTP-сообщений брокеру AMQP

Я ищу способ получить кучу входящих SMTP-сообщений и передать их брокеру AMQP для дальнейшей маршрутизации и обработки. Сообщения на самом деле не попадают в почтовый ящик, вместо этого в качестве шлюза сообщений используется SMTP.

Я написал Postfix After-Queue Content Filter на Python, который отбрасывает входящее SMTP-сообщение на брокера RabbitMQ. Это хорошо работает — я получаю необработанное сообщение по очереди, и потребитель его прекрасно принимает. Проблема в том, что соединение AMQP создается и разрывается с каждым сообщением... скрипт Content Filter каждый раз повторно выполняется с нуля. Я предполагаю, что в конечном итоге это станет проблемой производительности.

Если бы я мог использовать что-то повторно входящее, я мог бы повторно использовать соединение. А может я просто неправильно ко всему отношусь...


person DeckerEgo    schedule 13.08.2012    source источник


Ответы (3)


Установление соединения AMQP через простой TCP выполняется довольно быстро. Возможно, если вы используете SSL, то это другая история, но вы уверены, что постановка необработанного сообщения в очередь на обмен AMQP будет узким местом? Я предполагаю, что на самом деле доставка сообщения через SMTP будет намного медленнее, поэтому то, как быстро вы можете ставить вещи в очередь, не повлияет на пропускную способность системы.

Если эта часть окажется узким местом, я предпочитаю создавать небольшие веб-серверы с помощью Sinatra или Rack, но похоже, что вы можете предпочесть решение на основе Python. Попросите фильтр содержимого postfix выполнить HTTP POST, используя curl, на веб-сервер, который поддерживает постоянное соединение с сервером AMQP.

Конечно, теперь у вас есть дополнительная движущаяся часть, для которой вам нужно подумать о мониторинге, обработке ошибок и безопасности.

person Tim Potter    schedule 13.08.2012
comment
Это хороший момент... Интересно, какая разница во времени между конструкцией/разборкой AMQP и конструкцией/разборкой HTTP. SSL не используется, и обмен (должен) уже быть построен, так что это не может быть большой проблемой. Просто пытаюсь спасти своего преемника от плохих решений ;) На самом деле мне наплевать на Python ... найдите Синатру для такого рода вещей. - person DeckerEgo; 13.08.2012

Используйте SwiftMQ. Он имеет мост JavaMail, который получает ваши электронные письма из учетной записи IMAP или POP3. , преобразует его в сообщение JMS, которое затем может использоваться AMQP 0.9. 1 и/или AMQP 1.0 и, конечно же, клиент JMS.

person netvault    schedule 13.08.2012
comment
Я думаю, что это определенно был бы путь, если бы электронные письма когда-либо поступали в почтовый ящик. Однако цель состоит в том, чтобы они вообще никогда не попадали в почтовый ящик, а вместо этого сразу переходили от принятия SMTP к брокеру. - person DeckerEgo; 13.08.2012

Вы можете заставить Postfix доставлять все или некоторые из ваших электронных писем во внешнюю программу, где вы можете бросить их куда угодно. Некоторые примеры можно найти здесь.< /а>

person sanmai    schedule 08.09.2014