

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

# 什麼是 Amazon Simple Queue Service？
<a name="welcome"></a>

Amazon Simple Queue Service (Amazon SQS) 提供安全、耐用且可用的託管佇列，可讓您整合與分離分散式軟體系統和元件。Amazon SQS 提供通用結構，例如[無效字母佇列](sqs-dead-letter-queues.md)和[成本分配標籤](sqs-queue-tags.md)。它提供通用 Web 服務 API，您可以使用 AWS SDK 支援的任何程式設計語言來存取。

## 使用 Amazon SQS 的優勢
<a name="sqs-benefits"></a>
+ **安全性** – [您可以控制](security-iam.md)誰能傳送訊息到 Amazon SQS 佇列，並從佇列接收訊息。您可以選擇使用預設的 Amazon SQS 受管伺服器端加密 (SSE) 保護佇列中訊息的內容，也可以使用 AWS Key Management Service 中管理的自訂 [SSE](sqs-server-side-encryption.md) 金鑰 (AWS KMS) 來傳輸敏感資料。
+ **耐用性** - 為了確保訊息的安全，Amazon SQS 將它們存放在多部伺服器上。標準佇列支援[至少傳遞訊息一次](standard-queues-at-least-once-delivery.md)，而 FIFO 佇列支援[恰好處理一次訊息](FIFO-queues-exactly-once-processing.md)和[高輸送量](high-throughput-fifo.md)模式。
+ **可用性** – Amazon SQS 使用[冗餘基礎設施](#sqs-basic-architecture)以提供對訊息的高度並行存取，以及產生和消耗訊息的高可用性。
+ **可擴展性** – Amazon SQS 可以個別處理每個[緩衝的請求](sqs-client-side-buffering-request-batching.md)，以透明的方式進行擴展來處理負載增加或尖峰，無須任何佈建指示。
+ **可靠性** – Amazon SQS 在處理訊息時會鎖定訊息，以便同一時間多個生產者可以傳送、多個消費者可以接收訊息。
+ **自訂** - 您的佇列不需完全一樣；舉例來說，您可以[在佇列上設定預設延遲](sqs-delay-queues.md)。您可以使用 [Amazon Simple Storage Service (Amazon S3) ](sqs-s3-messages.md)或 Amazon DynamoDB 存放大於 1 MiB 的訊息內容，而 Amazon SQS 會保留指向 Amazon S3 物件的指標，或者您可以將大型訊息分割成較小的訊息。

## 基本 Amazon SQS 架構
<a name="sqs-basic-architecture"></a>

   了解分散式傳訊系統的各個部分以及 Amazon SQS 訊息從建立到刪除的生命週期。   

本節說明分散式傳訊系統的元件，並說明 Amazon SQS 訊息的生命週期。

### 分散式佇列
<a name="sqs-distributed-queue"></a>

分散式傳訊系統中有三個主要部分：**分散式系統的元件**、**佇列** （在 Amazon SQS 伺服器上分佈），以及**佇列中的訊息**。

在以下情況中，您的系統有數個*生產者* (可傳送訊息到佇列的元件) 以及*消費者* (從佇列接收訊息的元件)。佇列 (存放訊息 A 到 E) 將訊息以備援方式存放在多個 Amazon SQS 伺服器上。

![\[分散式傳訊系統的三個主要部分：分散式系統的元件、佇列 （在 Amazon SQS 伺服器上分佈），以及佇列中的訊息。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/ArchOverview.png)


### 訊息生命週期
<a name="sqs-message-lifecycle"></a>

以下情況說明佇列中 Amazon SQS 訊息從建立到刪除的生命週期。

![\[從建立到刪除，佇列中 Amazon SQS 訊息的生命週期。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-message-lifecycle-diagram.png)


![\[Section one description for the previous lifecycle diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-1-red.png) 生產者 （元件 1) 會將訊息 A 傳送至佇列，並以備援方式將訊息分散到 Amazon SQS 伺服器。

![\[Section two description for the previous lifecycle diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-2-red.png) 當取用者 （元件 2) 準備好處理訊息時，它會從佇列取用訊息，並傳回訊息 A。在處理訊息 A 時，訊息 A 仍會留在佇列上，在[可見性逾時](sqs-visibility-timeout.md)期間內，不會傳回至後續的接收請求。

![\[Section three description for the previous lifecycle diagram.\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/number-3-red.png) 取用者 （元件 2) 會從佇列刪除訊息 A，以防止在可見性逾時過期時再次接收和處理訊息。

**注意**  
Amazon SQS 會自動刪除已在佇列中超過訊息保留期上限的訊息。預設的訊息保留期間為 4 天。不過可以使用 `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` 動作，將訊息保留期間設為 60 秒至 1,209,600 秒 (14 天)。

## Amazon SQS、Amazon MQ 和 Amazon SNS 之間的差異
<a name="sqs-difference-from-amazon-mq-sns"></a>

 Amazon SQS、[Amazon SNS](https://aws.amazon.com/sns/) 和 [Amazon MQ](https://aws.amazon.com/amazon-mq/) 提供高度可擴展且easy-to-use受管傳訊服務，每個服務都專為分散式系統中的特定角色而設計。以下是這些服務之間差異的增強概觀：

 **Amazon SQS** 會將分散式軟體系統和元件分離並擴展為佇列服務。它通常透過單一訂閱者處理訊息，非常適合需要預防訂單和損失的工作流程。為了進行更廣泛的分佈，整合 Amazon SQS 與 Amazon SNS 可啟用[廣發訊息模式](https://aws.amazon.com/getting-started/hands-on/send-fanout-event-notifications/)，同時有效地將訊息推送給多個訂閱者。

 **Amazon SNS** 允許發佈者透過做為通訊管道的主題傳送訊息給多個訂閱者。訂閱者使用支援的端點類型接收已發佈的訊息，例如 [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)、[Amazon SQS](#welcome)、[Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)、HTTP、電子郵件、行動推播通知和行動文字訊息 (SMS)。此服務非常適合需要即時通知的情況，例如即時使用者參與或警示系統。為了防止訂閱者離線時訊息遺失，整合 Amazon SNS 與 Amazon SQS 佇列訊息可確保一致的傳遞。

 **Amazon MQ** 最適合希望從傳統訊息中介裝置遷移的企業，支援標準簡訊通訊協定，例如 AMQP 和 MQTT，以及 [Apache ActiveMQ](http://activemq.apache.org/) 和 [RabbitMQ](https://www.rabbitmq.com/)。它與需要穩定、可靠訊息的舊版系統相容，無需進行大量重新設定。

 下表提供每個服務資源類型的概觀：


| Resource Type (資源類型) | Amazon SNS | Amazon SQS | Amazon MQ | 
| --- | --- | --- | --- | 
| 同步 | 否 | 否 | 是 | 
| 異步 | 是 | 是 | 是 | 
| 佇列 | 否 | 是 | 是 | 
| 發佈者-訂閱者訊息 | 是 | 否 | 是 | 
| 訊息代理程式 | 否 | 否 | 是 | 

建議新應用程式使用 Amazon SQS 和 Amazon SNS，因為它們可以從近乎無限的可擴展性和簡單的 API 中受益。它們通常會透過pay-as-you-go定價，為大量應用程式提供更具成本效益的解決方案。我們建議使用 Amazon MQ 從現有訊息代理程式遷移應用程式，這些訊息代理程式依賴 JMS 等 API 或 Advanced Message Queuing Protocol (AMQP)、MQTT、OpenWire 和 Simple Text Oriented Message Protocol (STOMP) 等通訊協定的相容性。