java - 如何使用 AWS X-Ray 通过 SQS 队列跟踪请求

标签 java amazon-web-services aws-lambda amazon-sqs

我正在尝试使用 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/

相关文章:

java - 了解 Spring 上下文初始化顺序

python - Py3 : Can't open file/snapshot/serverless/lib/plugins/aws/invokeLocal/invoke. py:没有那个文件或目录

java - 如何从 servlet 访问 www 目录中的文件?

android - 从 AWS Lambda Node.js 向 Android 手机发送 AWS SNS 通知

hadoop - Hadoop 的 DynamoDB 输入格式

ios - AWS 推送通知服务集成错误

javascript - 为什么我的 Lambda 函数在一次调用中发送了两次 SQS 消息?

node.js - KeyConditionExpression 错误和空错误响应

java - java 9 上的 jaxb2-maven-plugin 失败

java - 使用 JBoss 和 Spring 在 Java Web 应用程序之间共享业务对象实例的最佳方式是什么?