AOP dengan Spring dan X-Ray SDK for Java - AWS X-Ray

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

AOP dengan Spring dan X-Ray SDK for Java

Topik ini menjelaskan cara menggunakan SDK X-Ray dan Kerangka Kerja Spring untuk menginstrumentasikan aplikasi Anda tanpa mengubah logika intinya. Ini berarti bahwa kini ada cara non-invasif untuk menginstrumentasikan aplikasi Anda agar berjalan dari jarak jauh dalam AWS.

Mengonfigurasi Spring

Anda dapat menggunakan Maven atau Gradle untuk mengonfigurasi Spring menggunakan AOP untuk instrumen aplikasi Anda.

Jika Anda menggunakan Maven untuk membangun aplikasi Anda, tambahkan ketergantungan berikut di file pom.xml Anda.

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-spring</artifactId> <version>2.11.0</version> </dependency>

Untuk Gradle, tambahkan ketergantungan berikut di file build.gradle Anda.

compile 'com.amazonaws:aws-xray-recorder-sdk-spring:2.11.0'

Mengkonfigurasi Spring

Selain dependensi Spring yang dijelaskan di bagian sebelumnya, jika Anda menggunakan Spring Boot, tambahkan dependensi berikut jika belum ada di classpath Anda.

Maven:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.5.2</version> </dependency>

Gradle:

compile 'org.springframework.boot:spring-boot-starter-aop:2.5.2'

Menambahkan filter pelacakan ke aplikasi Anda

Tambahkan Filter ke kelas WebConfig Anda. Teruskan nama segmen ke konstruktor AWSXRayServletFilter sebagai string. Untuk informasi selengkapnya tentang filter pelacakan dan menginstrumentasikan permintaan masuk, lihat Menelusuri permintaan yang masuk dengan X-Ray SDK for Java.

contoh src/main/java/myapp/WebConfig .java - spring
package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter("Scorekeep"); } }

Support

Spring 6 menggunakan Jakarta sebagai pengganti Javax untuk Enterprise Edition. Untuk mendukung namespace baru ini, X-Ray telah menciptakan serangkaian kelas parallel yang tinggal di Namespace Jakarta mereka sendiri.

Untuk kelas filter, gantijavax denganjakarta. Saat mengkonfigurasi strategi penamaan segmen, tambahkanjakarta sebelum nama kelas strategi penamaan, seperti pada contoh berikut:

package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import jakarta.servlet.Filter; import com.amazonaws.xray.jakarta.servlet.AWSXRayServletFilter; import com.amazonaws.xray.strategy.jakarta.SegmentNamingStrategy; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter(SegmentNamingStrategy.dynamic("Scorekeep")); } }

Anotasi kode Anda atau menerapkan antarmuka

Kelas Anda harus dianotasikan dengan @XRayEnabled, atau menerapkan antarmuka XRayTraced. Langkah ini memberitahu sistem AOP untuk membungkus fungsi kelas yang terdampak untuk instrumentasi X-Ray.

Mengaktifkan X-Ray dalam aplikasi

Untuk mengaktifkan pelacakan X-Ray dalam aplikasi Anda, kode Anda harus memperpanjang kelas abstrak BaseAbstractXRayInterceptordengan menimpa metode berikut.

  • generateMetadata—Fungsi ini mengizinkan kustomisasi metadata yang terlampir pada pelacakan fungsi saat ini. Secara default, nama kelas dari fungsi yang sedang berjalan dicatat dalam metadata. Anda dapat menambahkan lebih banyak data jika Anda memerlukan informasi tambahan.

  • xrayEnabledClasses—Fungsi ini kosong, dan harus tetap demikian. Berfungsi sebagai host untuk pointcut yang menginstruksikan penghalang tentang metode yang digunakan untuk membungkus. Tentukan pointcut dengan menentukan kelas yang dianotasikan dengan@XRayEnabled untuk melacak. Pernyataan pointcut berikut memberitahu penghalang untuk membungkus semua pengendali bean yang teranotasi dengan anotasi @XRayEnabled.

    @Pointcut(“@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)”)

Jika proyek Anda menggunakan Spring Data JPA, pertimbangkan untuk memperluas dariAbstractXRayInterceptor alih-alihBaseAbstractXRayInterceptor.

Contoh

Kode berikut memperluas kelas abstrak BaseAbstractXRayInterceptor.

@Aspect @Component public class XRayInspector extends BaseAbstractXRayInterceptor { @Override protected Map<String, Map<String, Object>> generateMetadata(ProceedingJoinPoint proceedingJoinPoint, Subsegment subsegment) throws Exception { return super.generateMetadata(proceedingJoinPoint, subsegment); } @Override @Pointcut("@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)") public void xrayEnabledClasses() {} }

Kode berikut adalah kelas yang akan diinstrumentasi oleh X-Ray.

@Service @XRayEnabled public class MyServiceImpl implements MyService { private final MyEntityRepository myEntityRepository; @Autowired public MyServiceImpl(MyEntityRepository myEntityRepository) { this.myEntityRepository = myEntityRepository; } @Transactional(readOnly = true) public List<MyEntity> getMyEntities(){ try(Stream<MyEntity> entityStream = this.myEntityRepository.streamAll()){ return entityStream.sorted().collect(Collectors.toList()); } } }

Jika Anda telah mengonfigurasi aplikasi Anda dengan benar, Anda akan melihat tumpukan panggilan aplikasi yang lengkap, dari pengendali hingga panggilan layanan seperti yang ditunjukkan pada tangkapan layar konsol tersebut.

Tumpukan panggilan lengkap.