選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

Amazon SQS 和 AWS X-Ray

焦點模式
Amazon SQS 和 AWS X-Ray - AWS X-Ray

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

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

AWS X-Ray 與 Amazon Simple Queue Service (Amazon SQS) 整合,以追蹤透過 Amazon SQS 佇列傳遞的訊息。如果服務使用 X-Ray SDK 追蹤請求,Amazon SQS 可以傳送追蹤標頭,並繼續使用一致的追蹤 ID 將原始追蹤從寄件者傳播給消費者。追蹤連續性可讓使用者追蹤、分析和偵錯整個下游服務。

AWS X-Ray 支援使用 Amazon SQS 和 追蹤事件驅動型應用程式 AWS Lambda。使用 CloudWatch 主控台查看與 Amazon SQS 佇列並由下游 Lambda 函數處理之每個請求的連線檢視。來自上游訊息生產者的追蹤會自動連結至來自下游 Lambda 消費者節點的追蹤,建立end-to-end檢視。如需詳細資訊,請參閱追蹤事件驅動的應用程式

透過 Amazon SQS 佇列從 Lambda 追蹤映射。

Amazon SQS 支援下列追蹤標頭檢測:

  • 預設 HTTP 標頭 – 當您透過 SDK 呼叫 Amazon SQS 時,X-Ray AWS SDK 會自動將追蹤標頭填入為 HTTP 標頭。預設追蹤標頭由 X-Amzn-Trace-Id 攜帶,並對應至 SendMessageSendMessageBatch 請求中包含的所有訊息。若要進一步了解預設 HTTP 標頭 , 請參閱 追蹤標頭

  • AWSTraceHeader 系統屬性AWSTraceHeader是 Amazon SQS 預留的訊息系統屬性,用於在佇列中攜帶 X-Ray 追蹤標頭與訊息。即使未透過 X-Ray SDK 自動檢測,AWSTraceHeader也可以使用,例如在為新語言建置追蹤 SDK 時。同時設定這兩個標頭檢測時,訊息系統屬性會覆寫 HTTP 追蹤標頭。

在 Amazon EC2 上執行時,Amazon SQS 支援一次處理一則訊息。這適用於在內部部署主機上執行,以及使用容器服務時 AWS Fargate,例如 Amazon ECS 或 AWS App Mesh。

追蹤標頭會從 Amazon SQS 訊息大小和訊息屬性配額中排除。啟用 X-Ray 追蹤不會超過您的 Amazon SQS 配額。若要進一步了解 AWS 配額,請參閱 Amazon SQS Quotas

傳送 HTTP 追蹤標頭

Amazon SQS 中的寄件者元件可以透過 SendMessageBatchSendMessage呼叫自動傳送追蹤標頭。檢測 AWS SDK 用戶端時,可以透過 X-Ray SDK 支援的所有語言自動追蹤它們。您在這些服務中存取的追蹤 AWS 服務 和資源 (例如 Amazon S3 儲存貯體或 Amazon SQS 佇列),會在 X-Ray 主控台的追蹤地圖上顯示為下游節點。

若要了解如何使用您偏好的語言追蹤 AWS SDK 呼叫,請參閱支援的 SDKs 中的下列主題:

擷取追蹤標頭和復原追蹤內容

如果您使用的是 Lambda 下游消費者,則會自動進行追蹤內容傳播。若要繼續與其他 Amazon SQS 取用者進行內容傳播,您必須手動檢測接收器元件的交接。

復原追蹤內容有三個主要步驟:

  • 呼叫 ReceiveMessage API,從 AWSTraceHeader 屬性的佇列接收訊息。

  • 從屬性擷取追蹤標頭。

  • 從標頭復原追蹤 ID。選擇性地將更多指標新增至區段。

以下是使用適用於 Java 的 X-Ray 開發套件撰寫的範例實作。

範例 :擷取追蹤標頭和復原追蹤內容
// Receive the message from the queue, specifying the "AWSTraceHeader" ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest() .withQueueUrl(QUEUE_URL) .withAttributeNames("AWSTraceHeader"); List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages(); if (!messages.isEmpty()) { Message message = messages.get(0); // Retrieve the trace header from the AWSTraceHeader message system attribute String traceHeaderStr = message.getAttributes().get("AWSTraceHeader"); if (traceHeaderStr != null) { TraceHeader traceHeader = TraceHeader.fromString(traceHeaderStr); // Recover the trace context from the trace header Segment segment = AWSXRay.getCurrentSegment(); segment.setTraceId(traceHeader.getRootTraceId()); segment.setParentId(traceHeader.getParentId()); segment.setSampled(traceHeader.getSampled().equals(TraceHeader.SampleDecision.SAMPLED)); } }

下一個主題:

Amazon S3

上一個主題:

Step Functions
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。