2014-10-10 104 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服務器發送到隊列,然後工作人員在收到隊列中的項目後發送電子郵件。