Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Generazione di sottosegmenti personalizzati con l'SDK X-Ray per Java
I sottosegmenti estendono una tracciasegmentocon dettagli sul lavoro svolto per soddisfare una richiesta. Ogni volta che si effettua una chiamata con un client strumentato, l'SDK X-Ray registra le informazioni generate in un sottosegmento. È possibile creare sottosegmenti aggiuntivi per raggruppare altri segmenti secondari, per misurare le prestazioni di una sezione di codice o per registrare annotazioni e metadati.
Per gestire i sottosegmenti, utilizza i metodi beginSubsegment
e endSubsegment
.
Esempio GameModel.java - Sottosegmento personalizzato
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 questo esempio, il codice all'interno del sottosegmento carica la sessione di gioco da DynamoDB con un metodo sul modello della sessione e utilizza l'AWS SDK for Javadi DynamoDB mapper per salvare il gioco. Il wrapping di questo codice in un sottosegmento rende le chiamate a figlie diSave Game
Sottosegmento nella visualizzazione del tracciamento nella console.
Se il codice nel tuo sottosegmento genera eccezioni gestite, eseguine il wrapping in un blocco try
e chiama AWSXRay.endSubsegment()
in un blocco finally
per assicurare che il sottosegmento sia sempre chiuso. Se un sottosegmento non è chiuso, il segmento padre non può essere completato e non sarà inviato a X-Ray X.
Nel caso di codice che non genera eccezioni controllate, puoi inoltrare il codice aAWSXRay.CreateSubsegment
funzione Lambda.
Esempio Funzione Lambda del sottosegmento
import com.amazonaws.xray.AWSXRay;
AWSXRay.createSubsegment("getMovies", (subsegment) -> {
// function code
});
Quando crei un sottosegmento all'interno di un segmento o di un altro sottosegmento, l'SDK X-Ray per Java genera per esso un ID e memorizza l'ora di inizio e fine.
Esempio Sottosegmento con metadati
"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"
}
},
Per la programmazione asincrona e multi-thread, è necessario passare manualmente il sottosegmento alendSubsegment()
metodo per garantire che sia chiuso correttamente perché il contesto X-Ray può essere modificato durante l'esecuzione asincrona. Se un sottosegmento asincrono viene chiuso dopo la chiusura del segmento padre, questo metodo trasmette automaticamente l'intero segmento al demone a X-Ray X.
Esempio Sottosegmento asincrono
@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();
}