Instrumentieren von Startup-Code - AWS X-Ray

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Instrumentieren von Startup-Code

Das X-Ray-SDK SDK for Java erstellt automatisch Segmente für eingehende Anfragen. Wenn eine Anfrage im Leistungsumfang enthalten ist, können Sie instrumentierte Clients verwenden und Untersegmente ohne Probleme aufzeichnen. Wenn Sie jedoch versuchen, einen instrumentierten Client im Startup-Code zu verwenden, erhalten Sie eine SegmentNotFoundException.

Startup-Code wird außerhalb des standardmäßigen Anfrage-/Antwort-Ablaufs einer Webanwendung ausgeführt, sodass Sie für eine Instrumentierung Segmente manuell erstellen müssen. Scorekeep stellt die Instrumentierung von Startup-Code in den WebConfig-Dateien dar. Scorekeep ruft während des Starts eine SQL-Datenbank und Amazon SNS auf.

DerWebConfig-Klasse erstellt ein Amazon SNS SNS-Abonnement für Benachrichtigungen. Um ein Segment bereitzustellen, auf das das X-Ray-SDK schreiben kann, wenn der Amazon SNS SNS--Client verwendet wird, ruft ScorekeepbeginSegmentundendSegmentauf dem globalen Rekorder.

Beispiel src/main/java/scorekeep/WebConfig.java— InstrumentiertAWSSDK-Client im Startup-Code

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();

In :RdsWebConfigIn, das Scorekeep verwendet, wenn eine Amazon RDS-Datenbank verbunden ist, erstellt die Konfiguration außerdem ein Segment für den SQL-Client, das Hibernate verwendet, wenn es das Datenbankschema während des Starts anwendet.

Beispiel src/main/java/scorekeep/RdsWebConfig.java— Instrumentierter SQL-Datenbank-Client im Startup-Code

@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 wird automatisch ausgeführt und verwendet einen SQL-Client. Da der Client instrumentiert ist, muss Scorekeep die Standardimplementierung überschreiben und ein Segment bereitstellen, das das SDK verwenden kann, wenn der Client aufgerufen wird.