我需要为一个预计每小时发送 20 或 30 封电子邮件的中型项目处理电子邮件。
我在其他项目中设计了一个解决方案,它使用一个数据库表和一个每 5 或 10 分钟运行一次的 cronjob 来处理这个问题。数据库表非常简单。看起来像这样:
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 存储到表中以避免冲突。
我的问题朝着这个方向发展。我一直在使用此表来处理流量较低的网站中的电子邮件,并且效果很好。使用像 Celery 这样的队列管理器和像 RabbitMQ 这样的代理有什么优势?在我看来,我将增加另一层复杂性。使用像 Celery/RabbitMQ 这样的解决方案我会获得什么好处?
请给我一些线索。
此致,