Мы добавляем XRAY в наше приложение Spring Boot, и я не могу устранить следующую ошибку:
Failed to begin subsegment named 'Amazon S3': segment cannot be found.
Вот соответствующие части нашего кода:
pom.xml:
<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>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-xray-recorder-sdk-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-xray-recorder-sdk-sql-postgres</artifactId>
<version>1.2.1</version>
</dependency>
SpringApplication.java
@Bean
public Filter TracingFilter() {
return new AWSXRayServletFilter("myService");
}
Класс, вызывающий S3
@PostConstruct
public void runOnStartup(){
String fileName = "myFileName";
String bucketName = "myBucketName";
amazonS3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider("MyCredentials"))
.withClientConfiguration(getClientConfiguration())
.withRegion(region)
.build();
Segment segment = AWSXRay.beginSegment("do-startup-operation");
S3Object s3Object = amazonS3Client.getObject(bucketName, fileName);
AWSXRay.endSegment();
//Do stuff with S3Object
}
Что я пробовал до сих пор:
1) Я пытался использовать импорт sdk-aws-sdk-instrumentor и без него, добавляя при этом конфигурацию TracingHandler, как описано в этом вопросе и этой документации.
.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()))
2) Я нашел эту ветку , которая, кажется, предлагает использовать AWSXRAY.createSegment (), но я не уверен, что будет в лямбда-выражении или если это имеет отношение к моему сценарию
Прочая документация / код, который я прочитал и нашел соответствующим: https://docs.aws.amazon.com/xray/latest/devguide/scorekeep-startup.html
https://docs.aws.amazon.com/xray/latest/devguide/scorekeep-sdkclients.html
https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-multithreading.html
https://docs.aws.amazon.com/xray/latest/devguide/scorekeep-workerthreads.html
https://github.com/aws/aws-xray-sdk-java/blob/master/aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/contexts/ThreadLocalSegmentContext.java#L23
PS Я упростил свой код и пропустил некоторую обработку ошибок, чтобы тем, кто просматривает этот вопрос, было легче читать