1時間に20〜30通のメールを送信することを期待している中規模のプロジェクトのメールを処理する必要があります。
他のプロジェクトで、データベーステーブルと5分または10分ごとに実行されるcronジョブを使用してこれを処理するソリューションを設計しました。データベーステーブルは非常に単純です。このように見えます:
CREATE TABLE "atem_emails_envios" (
"id_email_envio" int4 NOT NULL,
"id_email_msg" varchar(20) NOT NULL,
"dat_inserted" timestamp NOT NULL,
"dat_sended" timestamp,
"try_number" int4,
"max_tries" int4 NOT NULL,
"email_from" varchar(500) NOT NULL,
"email_to" varchar(500) NOT NULL,
"email_cc" varchar(500),
"email_bcc" varchar(500),
"email_subject" varchar(500) NOT NULL,
"email_msg" text NOT NULL,
"error_msg" text,
"i_started" timestamp,
"pid" int4,
"coment" varchar(2000),
"id_utiliz_ins" varchar(45),
"id_utiliz_upd" varchar(45),
"data_ult_actual" timestamp,
PRIMARY KEY("id_email_envio"),
CONSTRAINT "Ref_atem_emails_envios_to_atem_mensagens_email" FOREIGN KEY ("id_email_msg")
REFERENCES "atem_mensagens_email"("id_email_msg")
MATCH SIMPLE
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE
);
電子メールが処理されているとき、衝突を避けるためにPIDをテーブルに保存するだけです。
私の質問はこの方向に進んでいます。私はこのテーブルを使用して、トラフィックの少ないWebサイトで電子メールを処理しており、うまく機能しています。CeleryのようなキューマネージャーとRabbitMQのようなブローカーを使用することにはどのような利点がありますか?複雑さの層をもう1つ追加するように思えます。Celery / RabbitMQのようなソリューションを使用するとどのようなメリットがありますか?
手がかりを教えてください。
よろしくお願いします、