我正在尝试使用 AWS Lambda 函数 f
启动并运行玩具示例,该函数由一个 SQS 队列 sqs
上的消息触发,发布到另一个队列 sqs'
,然后一个 worker,f'
从 sqs'
读取并处理跟踪整个“请求”的消息用 X 射线。
sqs -> f -> sqs' -> f'
目前,我已准备好队列以及从队列写入和接收的函数。我还使用 X-Ray 跟踪从第一个函数 f
到 sqs 队列的请求。
我当前的挑战是:如何将跟踪传播到最终工作人员,以便我可以在 X 射线中看到整个过程。
这是我当前的功能:
public class Hello implements RequestHandler<SQSEvent, Void> {
String OUTPUT_QUEUE_URL = "...";
private AmazonSQS sqs = AmazonSQSClientBuilder.standard()
.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()))
.build();
public Void handleRequest(SQSEvent event, Context context)
{
for(SQSMessage msg : event.getRecords()){
System.out.println(new String(msg.getBody()));
}
SendMessageRequest send_msg_request = new SendMessageRequest()
.withQueueUrl(OUTPUT_QUEUE_URL)
.withMessageBody("hello world")
.withDelaySeconds(5);
sqs.sendMessage(send_msg_request);
return null;
}
}
public class World implements RequestHandler<SQSEvent, Void>{
public Void handleRequest(SQSEvent event, Context context)
{
for(SQSMessage msg : event.getRecords()){
System.out.println(new String(msg.getBody()));
}
return null;
}
}
最佳答案
即使 SQS 现在支持 X-Ray 追踪,它也不会将追踪传播到 lambda 函数。这就是为什么在 SQS->Lambda 设置中,Lambda 总是开始一个新的跟踪。 nodejs xray SDK 中存在问题 https://github.com/aws/aws-xray-sdk-node/issues/208
关于java - 如何使用 AWS X-Ray 通过 SQS 队列跟踪请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51954687/