Generieren Sie mit dem X-Ray-SDK SDK for Java benutzerdefinierte Untersegmente - 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.

Generieren Sie mit dem X-Ray-SDK SDK for Java benutzerdefinierte Untersegmente

Teilsegmente erweitern ein TraceAbschnittmit Details über die geleistete Arbeit, um eine Anfrage zu stellen. Jedes Mal, wenn Sie einen Aufruf mit einem instrumentierten Client erstellen, erfasst das X-Ray-SDK die in einem Untersegment generierten Informationen. Sie können zusätzliche Teilsegmente erstellen, um andere Teilsegmente zu gruppieren, die Leistung eines Codeabschnitts zu messen oder Anmerkungen und Metadaten aufzuzeichnen.

Um Untersegmente zu verwalten, verwenden Sie die Methoden beginSubsegment und endSubsegment.

Beispiel GameModel.java – benutzerdefiniertes Untersegment

import com.amazonaws.xray.AWSXRay; ... public void saveGame(Game game) throws SessionNotFoundException { // wrap in subsegment Subsegment subsegment = AWSXRay.beginSubsegment("Save Game"); try { // check session String sessionId = game.getSession(); if (sessionModel.loadSession(sessionId) == null ) { throw new SessionNotFoundException(sessionId); } mapper.save(game); } catch (Exception e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(); } }

In diesem Beispiel lädt der Code innerhalb des Untersegments die Sitzung des Spiels von DynamoDB mit einer Methode für das Sitzungsmodell und verwendet dieAWS SDK for Java's DynamoDB Mapper um das Spiel zu speichern. Durch Verpacken dieses Codes in ein Untersegment werden die Aufrufe zu untergeordneten DynamoDB -Elementen derSave GameUntersegment in der Ablaufverfolgungsansicht der Konsole.

Wenn der Code in Ihrem Untersegment geprüfte Ausnahmen auslöst, verpacken Sie ihn in einen try-Block und rufen Sie AWSXRay.endSubsegment() in einem finally-Block auf, um sicherzustellen, dass das Untersegment immer geschlossen ist. Wenn ein Untersegment nicht geschlossen ist, kann das übergeordnete Segment nicht abgeschlossen werden und wird nicht an X-Ray-Segment gesendet.

Code, der keine geprüften Ausnahmen auslöst, können Sie übergeben anAWSXRay.CreateSubsegmentals Lambda-Funktion.

Beispiel Untersegment-Lambda-Funktion

import com.amazonaws.xray.AWSXRay; AWSXRay.createSubsegment("getMovies", (subsegment) -> { // function code });

Beim Erstellen eines Untersegments innerhalb eines Segments oder eines anderen Untersegments generiert das X-Ray-SDK SDK for Java eine ID dafür und erfasst die Start- und Endzeit.

Beispiel Untersegment mit Metadaten

"subsegments": [{ "id": "6f1605cd8a07cb70", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "Custom subsegment for UserModel.saveUser function", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } },

Für die asynchrone und Multi-Thread-Programmierung müssen Sie das Teilsegment manuell an dieendSubsegment()-Methode, um sicherzustellen, dass es korrekt geschlossen ist, da der X-Ray-Kontext während der asynchronen Ausführung geändert werden kann. Wenn ein asynchrones Teilsegment geschlossen wird, nachdem sein übergeordnetes Segment geschlossen wurde, streamt diese Methode automatisch das gesamte Segment in den X-Ray-Daemon.

Beispiel Asynchrones Untersegment

@GetMapping("/api") public ResponseEntity<?> api() { CompletableFuture.runAsync(() -> { Subsegment subsegment = AWSXRay.beginSubsegment("Async Work"); try { Thread.sleep(3000); } catch (InterruptedException e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(subsegment); } }); return ResponseEntity.ok().build(); }