Menginstrumentasi kode perusahaan rintisan - AWS X-Ray

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

Menginstrumentasi kode perusahaan rintisan

X-Ray SDK for Java secara otomatis membuat segmen untuk permintaan masuk. Selama permintaan berada dalam cakupan, Anda dapat menggunakan klien berinstrumen dan mencatat subsegmen tanpa masalah. Namun, jika Anda mencoba menggunakan klien berinstrumen dalam kode perusahaan rintisan, Anda akan mendapatkan SegmentNotFoundException.

Kode perusahaan rintisan berjalan di luar aliran permintaan/respons standar aplikasi web, jadi Anda perlu membuat segmen secara manual untuk melengkapinya. Scorekeep menunjukkan instrumentasi kode perusahaan rintisan dalam file WebConfig. Scorekeep memanggil basis data SQL dan Amazon SNS selama perusahaan rintisan.

Diagram showing client requests to Scorekeeper-init, which connects to SQL database and SNS.

Kelas WebConfig default membuat langganan Amazon SNS untuk notifikasi. Untuk menyediakan segmen bagi SDK X-Ray untuk menulis ketika klien Amazon SNS digunakan, Scorekeep memanggil beginSegment dan endSegment pada catatan global.

contoh src/main/java/scorekeep/WebConfig.java – Klien AWS yang diinstrumentasi dalam kode perusahaan rintisan
AWSXRay.beginSegment("Scorekeep-init"); if ( System.getenv("NOTIFICATION_EMAIL") != null ){ try { Sns.createSubscription(); } catch (Exception e ) { logger.warn("Failed to create subscription for email "+ System.getenv("NOTIFICATION_EMAIL")); } } AWSXRay.endSegment();

Di RdsWebConfig, yang Scorekeep gunakan saat basis data Amazon RDS terhubung, konfigurasi juga membuat segmen untuk klien SQL yang digunakan Hibernate saat menerapkan skema basis data selama perusahaan rintisan.

contoh src/main/java/scorekeep/RdsWebConfig.java – Klien basis data SQL yang diinstrumentasi dalam kode perusahaan rintisan
@PostConstruct public void schemaExport() { EntityManagerFactoryImpl entityManagerFactoryImpl = (EntityManagerFactoryImpl) localContainerEntityManagerFactoryBean.getNativeEntityManagerFactory(); SessionFactoryImplementor sessionFactoryImplementor = entityManagerFactoryImpl.getSessionFactory(); StandardServiceRegistry standardServiceRegistry = sessionFactoryImplementor.getSessionFactoryOptions().getServiceRegistry(); MetadataSources metadataSources = new MetadataSources(new BootstrapServiceRegistryBuilder().build()); metadataSources.addAnnotatedClass(GameHistory.class); MetadataImplementor metadataImplementor = (MetadataImplementor) metadataSources.buildMetadata(standardServiceRegistry); SchemaExport schemaExport = new SchemaExport(standardServiceRegistry, metadataImplementor); AWSXRay.beginSegment("Scorekeep-init"); schemaExport.create(true, true); AWSXRay.endSegment(); }

SchemaExport berjalan secara otomatis dan menggunakan klien SQL. Karena klien diinstrumentasi, Scorekeep harus mengganti implementasi default dan menyediakan segmen SDK untuk digunakan ketika klien dipanggil.