2014-10-10 53 views
1

我正在使用PHP和AWS'SDK。我有一个关于SES服务的问题。如果我将一封电子邮件发送到SES的脚本的其他部分正在运行的过程中。例如,在处理用户注册的相同流程中,通过SES直接发送电子邮件,PHP过程将锁定,直到SES完成发送电子邮件为止?还是SES进入排序的内部队列并从那里发送,因为它认为合适?AWS SES异步?

或者,将电子邮件数据推送到SQS队列以处理通过SES发送更智能吗?

+0

简而言之,它不会锁定直到发送,它只会锁定,直到请求发送很复杂(ms) – 2014-10-10 03:12:43

+0

因此,当在客户端对象上调用Send()时,它会锁定? – 2014-10-10 03:56:44

回答

1

一旦SES接受您的信息,您的SES电话会返回。

直到SES传递消息后才会阻止。

SES试图快速传递邮件,但实际上将重试长达12小时,按“方案2”在这里:http://sesblog.amazon.com/post/Tx1S0ND7F4PCCGN/

任选地,输送,故障,和弹跳通知异步返回(后)通过简单的通知服务。 http://docs.aws.amazon.com/ses/latest/DeveloperGuide/notifications.html

+0

好的,所以不需要推送SES的进程 - >发送在当前进程之外的一个单独的队列中运行? – 2014-10-11 04:49:50

+0

是的。那是对的。 – Aldee 2016-05-02 08:17:28

0

理想情况下,您将有一个命令或另一个函数从后台调用,然后发送电子邮件,这样不会让用户在此过程中等待。您将设置监听器,监听注册事件,然后在注册过程中触发事件,然后处理任务。听众会处理事件。您可以在哪里发送电子邮件,或发送给SQS,以便您的工作机器可以发送电子邮件。

这是一个很好的视频,关于如何做到这一点,在这个时代,而不是像5年前人们做的那样。 https://laracasts.com/series/commands-and-domain-events

如果您从同一个请求对象发送电子邮件,用户将不得不等待电子邮件发送,如果您只是将用户数据发送到队列,并设置一个命令处理所有来自队列并发送相应的命令与消息数据,然后您可以发送电子邮件。但是真的,我认为这会对简单的电子邮件发送造成很大的影响。只需在接收请求的机器上从后台进程发送它。如果您有将网络机器与后台工作人员分开的体系结构,则可以将数据从注册时的Web服务器发送到队列,然后工作人员在收到队列中的项目后发送电子邮件。