AOP mit Spring und dem X-Ray-SDK SDK for Java - 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.

AOP mit Spring und dem X-Ray-SDK SDK for Java

In diesem Thema wird beschrieben, wie Sie das X-Ray SDK und das Spring Framework nutzen, um Ihre Anwendung zu instrumentieren, ohne ihre Kern-Logik zu ändern. Das bedeutet, dass es jetzt eine nicht invasive Methode gibt, um Ihre Anwendungen zu instrumentieren, die remote ausgeführt werden.AWSaus.

Konfigurieren von Spring

Sie können Maven oder Gradle verwenden, um Spring zu konfigurieren, um AOP für die Instrumentierung Ihrer Anwendung verwenden zu können.

Wenn Sie Ihre Anwendung mit Maven erstellen, fügen Sie die folgende Abhängigkeit in Ihrer pom.xml-Datei hinzu.

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

Für Gradle fügen Sie die folgende Abhängigkeit in Ihre build.gradle-Datei ein.

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

Konfigurieren von Spring

Fügen Sie zusätzlich zu der im vorherigen Abschnitt beschriebenen Spring-Abhängigkeit die folgende Abhängigkeit hinzu, wenn Sie Spring Boot verwenden, wenn sie nicht bereits in Ihrem Klassenpfad enthalten ist.

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'

Hinzufügen eines Ablaufverfolgungsfilters zu Ihrer Anwendung

Hinzufügen einerFilterzu IhremWebConfig-Klasse. Übermitteln Sie den Segmentnamen als Zeichenfolge an den AWSXRayServletFilter-Konstruktor. Weitere Informationen zum Ablaufverfolgen von Filtern und Instrumentieren von eingehenden Anfragen finden Sie unterAblaufverfolgung eingehender Anfragen mit dem X-Ray-SDK SDK for Javaaus.

Beispiel 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"); } }

Kommentieren Ihres Codes oder Implementieren einer Schnittstelle

Ihre Klassen müssen entweder mit den -Kommentaren kommentiert werden@XRayEnabledAnnotation oder implementieren Sie dasXRayTraced-Schnittstelle implementieren. Damit wird das AOP-System angewiesen, die Funktionen der betroffenen Klasse für die X-Ray-Instrumentierung zu kapseln.

Aktivieren von X-Ray in Ihrer Anwendung

Um das X-Ray-Tracing in Ihrer Anwendung zu aktivieren, muss Ihr Code die abstrakte Klasse erweitern,BaseAbstractXRayInterceptorindem er die folgenden Methoden überschreibt.

  • generateMetadata– Diese Funktion ermöglicht die Anpassung der Metadaten, die dem Trace der aktuellen Funktion zugeordnet sind. Standardmäßig wird der Klassenname der ausgeführten Funktion in den Metadaten aufgezeichnet. Sie können weitere Daten hinzufügen, wenn Sie zusätzliche Informationen benötigen.

  • xrayEnabledClasses– Diese Funktion ist leer und sollte dies auch bleiben. Sie dient als Host für ein Pointcut, das den Interceptor anweist, welche Methoden gekapselt werden sollen. Definieren Sie das Pointcut, indem Sie angeben, welche der Klassen mit @XRayEnabled kommentiert sind, um ein Tracing durchzuführen. Die folgende pointcut-Anweisung weist den Interceptor an, alle Controller-Beans einzukapseln, die mit dem Kommentar @XRayEnabled gekennzeichnet sind.

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

Wenn Ihr Projekt Spring Data JPA verwendet, sollten Sie erwägen, vonAbstractXRayInterceptoranstelle vonBaseAbstractXRayInterceptoraus.

Beispiel

Der folgende Code erweitert die abstrakte Klasse.BaseAbstractXRayInterceptoraus.

@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() {} }

Der folgenden Code ist eine Klasse, die von X-Ray instrumentiert wird.

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

Wenn Sie Ihre Anwendung ordnungsgemäß konfiguriert haben, sollten Sie den vollständigen Aufruf-Stack der Anwendung sehen, vom Controller bis zu den Service-Aufrufe, wie im folgenden Screenshot der Konsole gezeigt.


        Der vollständige Aufruf-Stack.