6

我们最近开始将 AWS Xray 添加到我们的 Spring 项目中,并成功地利用AWSXRayServletFilter用于创建Segments来满足我们的客户请求。

现在我们还开始添加 AWS SDK Instrumentor 来跟踪我们对 AWS 服务的使用。其中之一是 SQS,我们使用它amazon-sqs-java-messaging-lib来利用 JMS 来接收 SQS 消息。这是我们面临一些麻烦的地方。

每次我们的应用程序尝试获取消息时,都会TracingHandler尝试创建 aSubSegment并失败,因为Segment尚未创建。我们如何将这些请求包装在一个Segment? 该信息不会包含在消息本身中以将段从将消息推送到队列的资源链接在一起吗?

如果缺少一个或至少从父跟踪 id 中拾取,我会希望有 Context Missing 策略可用于创建一个段,但我没有看到他们最新文档中包含的信息。

4

1 回答 1

4

这是一个已知问题,已在官方论坛上讨论过。这里有几个链接: https://forums.aws.amazon.com/thread.jspa?threadID=252012&tstart=0 https://forums.aws.amazon.com/thread.jspa?threadID=257258&tstart=25

每次我们的应用程序尝试获取消息时,TracingHandler 都会尝试创建一个 SubSegment 并失败,因为还没有创建 Segment。我们如何将这些请求包装在一个 Segment 中?该信息不会包含在消息本身中以将段从将消息推送到队列的资源链接在一起吗?

Segment 信息保存在 ThreadLocal 中。如果您在单独的线程中运行某些东西,则必须手动创建一个段,因此在创建子段时您将拥有所需的 ThreadLocal 数据。SQS 消息,甚至与 X-Ray 服务相关的 SQS 服务本身也没有什么特别之处。它仅使用 SQS 客户端,通过使用处理程序跟踪 ThreadLocal 数据,使 X-Ray 推断对 SQS 的调用已发生。

如果缺少或至少从父跟踪 id 中拾取,我会期望有上下文缺失策略可用于创建一个段,但我没有看到他们最新文档中包含的信息。

那是我的功能要求之一。查看线程以及官方答案以及我在尝试自己实施这种上下文缺失策略时发现的当前限制。 https://forums.aws.amazon.com/thread.jspa?threadID=252012&tstart=0

于 2017-09-01T15:38:25.553 回答