如何解决无法使用 Spring 启动应用程序配置 XRay
我有一个 springboot 应用程序,它在 AWS Lambda 中部署为 docker 映像。 该应用程序运行良好,但我想在我的应用程序中引入 X-Ray Traces 以进行调试。 我尝试遵循 AWS 官方文档 - https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-aop-spring.html。但没有帮助。
POM.XML:-
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-xray-recorder-sdk-spring</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-xray-recorder-sdk-core</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-xray-recorder-sdk-aws-sdk</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-xray-recorder-sdk-aws-sdk-instrumentor</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-xray-recorder-sdk-apache-http</artifactId>
<version>1.2.1</version>
</dependency>
WebConfig.java
@Configuration
public class WebConfig {
@Bean
public Filter TracingFilter(){
return new AWSXRayServletFilter ("add-participant");
}
}
XRayInspector.java
@Aspect
@Component
public class XRayInspector extends AbstractXRayInterceptor {
@Override
protected Map<String,Map<String,Object>> generateMetadata(ProceedingJoinPoint proceedingJoinPoint,Subsegment subsegment) {
return super.generateMetadata(proceedingJoinPoint,subsegment);
}
@Override
@pointcut("@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*)")
public void xrayEnabledClasses() {
System.out.println ("I am inside the class");
}
}
ParticipantService.java
@Service
@XRayEnabled
public class ParticipantService {
public void save (ParticipantRequest participantRequest) {
Entity mySegment = AWSXRay.beginSegment("save-participant");
AWSXRay.getGlobalRecorder().setTraceEntity(mySegment);
ParticipantCreatedEvent participantCreatedEvent = new ParticipantCreatedEvent
(participantRequest.getEventId (),participantRequest.getTeamId (),participantRequest.getFirstName (),participantRequest.getLastName (),participantRequest.getEmail (),participantRequest.getContactNumber (),participantRequest.getorganization (),participantJpaRepository.findMaxdisplayOrder (participantRequest.getEventId ()) + 1);
participant.setEventId (participantRequest.getEventId ());
participant.save(createParticipantCommand,participantCreatedEvent);
AWSXRay.endSegment();
}
}
我收到以下错误:-
Caused by: com.amazonaws.xray.exceptions.SubsegmentNotFoundException: Failed to end a subsegment: subsegment cannot be found.
at com.amazonaws.xray.contexts.LambdaSegmentContext.endSubsegment(LambdaSegmentContext.java:94) ~[aws-xray-recorder-sdk-core-1.2.1.jar!/:na]
谁能告诉我我做错了什么!
解决方法
该错误意味着在 Spring Boot 应用程序的某个地方缺少 X-Ray SDK 试图关闭的子段。您可以按照异常堆栈查找并确保在关闭之前始终创建一个子段。另外,我注意到您在服务中创建了一个细分市场。在 Lambda 中,检测 X-Ray SDK 与检测其他服务上托管的应用程序略有不同,该段将始终由 Lambda 运行时创建,您需要创建的唯一跟踪上下文是子段。
见:https://docs.aws.amazon.com/lambda/latest/dg/java-tracing.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。