2017-07-15 116 views
0

我正在嘗試將一些數據跟蹤到AWS Xray而無需使用快速中間件。我的代碼如下:AWS Xray手動模式設置段

const AWSXRay = require('aws-xray-sdk'), 
     AWS = AWSXRay.captureAWS(require('aws-sdk')), 
     sqs = AWSXRay.captureAWSClient(new AWS.SQS({apiVersion: '2012-11-05', region: 'eu-west-1'})); 

AWSXRay.enableManualMode(); 
var segment = new AWSXRay.Segment('sqsSegment'); 

var params = { 
    QueueUrl: "https://sqs.eu-west-1.amazonaws.com/123/queuename", 
    VisibilityTimeout: 0, 
    WaitTimeSeconds: 0, 
    XraySegment: segment 
}; 

sqs.receiveMessage(params, function(err, data) { 
    if (err) console.log(err, err.stack); 
    else  console.log(data); 
}); 

segment.close(); 

,我發現了錯誤:Error: No sub/segment specified. A sub/segment must be provided for manual mode.

我創建一個段,並通過它通過PARAMS到receiveMessage。但它似乎沒有工作。有任何想法嗎?

回答

2

您需要執行全局級捕獲(captureAWS)或客戶級捕獲(captureAWSClient),而不是兩者。使用'captureAWS',所有創建的客戶端都會自動進行修補,因此當您在已經修補的客戶端上執行另一個'captureAWSClient'時,捕獲函數將運行兩次,並且無法正確解析上下文。

刪除其中一個捕獲,它應該工作。 我會看看我是否可以添加修復程序來防止此問題。

希望這會有所幫助, Sandra

+0

這樣做的確解決了這個問題。但是,上面的代碼直接來自xray/nodejs文檔中的示例。 –

+0

你能附加一個鏈接到頁面嗎?我會盡快糾正。 – AWSSandra