

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon SQS 中及時處理訊息
<a name="best-practices-processing-messages-timely-manner"></a>

可見性逾時設定取決於您的應用程式需要花最久時間處理和刪除訊息。例如，如果您的應用程式需要 10 秒的時間來處理訊息，而您將可見性逾時設定為 15 分鐘，那麼如果先前的處理嘗試失敗，您必須等候相當長的時間才能再次嘗試處理訊息。或者，如果您的應用程式需要 10 秒的時間來處理訊息，但您將可見性逾時設定為只有 2 秒，那麼當原始消費者仍在處理訊息時，另一個消費者就會收到重複的訊息。

為了確保有足夠的時間來處理訊息，請使用以下其中一種策略：
+ 如果您知道 (或可以合理預估) 處理訊息需要多長的時間，請將訊息的*可見性逾時*延長到處理和刪除訊息所需的最長時間。如需詳細資訊，請參閱[設定可見性逾時](sqs-visibility-timeout.md#configuring-visibility-timeout)。
+ 如果您不知道處理一則訊息需要多久，請為您的消費者程序建立*活動訊號*：指定初始可見性逾時 (例如 2 分鐘)—接著只要您的消費者仍在處理訊息—每隔 1 分鐘就將可見性逾時延長 2 分鐘。
**重要**  
最大可見性逾時是從 Amazon SQS 收到 `ReceiveMessage` 請求的時間起算 12 小時。延長可見性逾時不會重設 12 小時的最大值。  
此外，您可能無法將個別訊息的逾時設定為完整 12 小時 (亦即 43,200 秒)，因為 `ReceiveMessage` 要求會啟動計時器。例如，如果您收到一則訊息，並透過傳送 `VisibilityTimeout` 等於 43,200 秒的 `ChangeMessageVisibility` 呼叫來設定 12 小時的最大值，則它可能會失敗。不過，除非透過 `ReceiveMessage` 要求訊息和更新可見性逾時之間有很大的延遲，否則使用值 43,195 秒就可以運作。如果您的消費者需要超過 12 小時，請考慮使用 Step Functions。