如何解决X射线多线程处理-无法终止子段:找不到子段
我在REST API的多线程环境中使用Xray时遇到问题。 我正在使用适用于Java的Xray自动检测代理和Spring Boot。
我尝试遵循此处找到的示例 https://docs.aws.amazon.com/xray/latest/devguide/scorekeep-workerthreads.html
但是,当结束我的细分时,我得到的日志输出为 “禁止AWS X-Ray上下文丢失异常(SubsegmentNotFoundException):无法结束子段:找不到子段。”
我怀疑在CompletableFuture完成之前,已经完全处理了请求并将响应返回给客户端了。我认为这意味着Xray区域已经关闭,这也许可以解释为什么我看到此问题。我想知道是否有什么办法可以解决这个问题?
Entity segment = AWSXRay.getGlobalRecorder().getTraceEntity();
CompletableFuture.runAsync(() -> {
AWSXRay.getGlobalRecorder().setTraceEntity(segment);
AWSXRay.beginSubsegment("PostTest");
try {
defaultService.createStatus(accessToken,statusRequest);
} finally {
AWSXRay.endSubsegment();
}
})
解决方法
感谢您的深入研究,该错误日志使用户感到困惑,Xray SDK最好提醒用户在开始细分时缺少细分,但不要在末尾抛出缺失的细分。
您的猜测是正确的,合乎逻辑的是子段可以比父段结束更晚结束,但是子段必须比其父段结束更早开始。其他子段将无法成功创建,并且肯定无法在结尾处结束。在段关闭之前,请尝试调整代码以启动此异步线程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。