AWS Xray手动模式设置段

时间:2017-07-15 14:03:19

标签: node.js amazon-web-services 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。但它似乎不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

删除其中一个捕获,它应该可以工作。 我会看看是否可以添加修复来防止这种情况。

希望这有帮助, 桑德拉