AWS Xray手动模式设置段

AWS Xray手动模式设置段

问题描述:

我正在尝试将一些数据跟踪到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。但它似乎没有工作。有任何想法吗?

您需要执行全局级捕获(captureAWS)或客户级捕获(captureAWSClient),而不是两者。使用'captureAWS',所有创建的客户端都会自动进行修补,因此当您在已经修补的客户端上执行另一个'captureAWSClient'时,捕获函数将运行两次,并且无法正确解析上下文。

删除其中一个捕获,它应该工作。 我会看看我是否可以添加修复程序来防止此问题。

希望这会有所帮助, Sandra

+0

这样做的确解决了这个问题。但是,上面的代码直接来自xray/nodejs文档中的示例。 –

+0

你能附加一个链接到页面吗?我会尽快纠正。 – AWSSandra