2012-08-13 2 views
3

인바운드 SMTP 메시지를 처리하여 AMQP 브로커에 추가 라우팅 및 처리 할 수있는 방법을 찾고 있습니다. 메시지는 실제로 사서함에 저장되지 않지만 대신 SMTP가 메시지 게이트웨이로 사용됩니다.AMQP 중개자에게 익명의 SMTP 메시지 보내기

저는 RabbitMQ 브로커에 인바운드 SMTP 메시지를 드롭하는 Postfix After Queue Content Filter를 Python으로 작성했습니다. 잘 작동합니다. 큐를 통해 원본 메시지를 가져오고 소비자가 멋지게 포착합니다. 문제는 각 메시지와 함께 AMQP 연결이 만들어지고 찢어진다는 것입니다. 콘텐츠 필터 스크립트는 매번 처음부터 다시 실행됩니다. 그 성능 문제가 끝날 것이라고 상상해보십시오.

재진입 뭔가를 활용할 수 있다면 연결을 다시 사용할 수 있습니다. 아니면 그냥 모든 것을 잘못 접근하고 있습니다 ...

답변

1

일반 TCP를 통해 AMQP 연결을 만드는 것은 매우 빠릅니다. 아마도 SSL을 사용한다면 또 다른 이야기지만 AMQP 교환기에 원시 메시지를 큐에 넣는 것이 병목 현상이 될 것입니까? 내 생각 엔 실제로 SMTP를 통해 메시지를 전달하는 속도가 훨씬 느려지므로 대기열에 넣을 수있는 속도가 시스템 처리량에 영향을 미치지 않을 것입니다.

이 조각이 병목으로 드러나는 경우 Sinatra 또는 Rack을 사용하여 웹 서버를 거의 만들지는 않지만 파이썬 기반 솔루션을 선호하는 것 같습니다. 접미어 내용 필터가 curl을 사용하여 웹 서버에 HTTP POST를 수행하도록하여 AMQP 서버에 대한 지속적인 연결을 유지합니다.

물론 모니터링, 오류 처리 및 보안에 대해 생각해 볼 필요가있는 움직이는 부분이 있습니다.

+0

그건 좋은 지적입니다 ... AMQP 구성/teardown 대 HTTP 구성/teardown 사이의 시간차가 무엇인지 궁금합니다. SSL이 관련되어 있지 않고 교환 (이미)이 구축되어 있으므로 큰 문제는 아닐 수도 있습니다. 내 결정을 악의적 인 결정으로부터 구하기 위해 노력하고 있습니다.) 파이썬에 대해서는별로 신경 쓰지 마세요. Sinatra와 함께이 일을 찾아보십시오. – DeckerEgo

0

SwiftMQ를 사용하십시오. 그것은을 가지고 있습니다.이 메시지는 IMAP 또는 POP3 계정에서 전자 메일을 받아서 AMQP 0.9.1 and/or AMQP 1.0 및 물론 JMS 클라이언트가 사용할 수있는 JMS 메시지로 변환합니다.

+0

전자 우편이 편지함에 도착한 경우 반드시 이동해야 할 것이라고 생각합니다. 그러나 목표는 결코 사서함에 전혀 충돌하지 않는 대신 SMTP 승인에서 브로커로 곧바로 이동하는 것입니다. – DeckerEgo