View a markdown version of this page

Generazione di sottosegmenti personalizzati con l' X-Ray SDK for Java - AWS X-Ray

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' X-Ray SDK for Java

Nota

X-Ray SDK/Daemon Avviso di manutenzione: il 25 febbraio 2026, AWS X-Ray SDKs/Daemon entrerà in modalità di manutenzione, in cui AWS verranno limitate le versioni di X-Ray SDK e Daemon per risolvere solo problemi di sicurezza. Per ulteriori informazioni sulla tempistica del supporto, consulta. Cronologia di X-Ray SDK e Daemon Support Ti consigliamo di migrare a. OpenTelemetry Per ulteriori informazioni sulla migrazione a OpenTelemetry, consulta Migrazione da X-Ray strumentazione a strumentazione. OpenTelemetry

I sottosegmenti estendono il segmento di una traccia con dettagli sul lavoro svolto per soddisfare una richiesta. Ogni volta che effettui una chiamata con un client dotato di strumenti, l' X-Ray SDK registra le informazioni generate in un sottosegmento. Puoi creare sottosegmenti aggiuntivi per raggruppare altri sottosegmenti, misurare le prestazioni di una sezione di codice o 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 del gioco da DynamoDB con un metodo sul modello di sessione e utilizza il mapper DynamoDB per salvare il AWS SDK per Java gioco. Inserendo questo codice in un sottosegmento, le chiamate DynamoDB sono figli del Save Game sottosegmento nella vista di traccia della console.

Cronologia che mostra Scorekeep e le operazioni con durate e controlli dello stato. DynamoDB

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 principale non può essere completato e non verrà inviato a. X-Ray

Per il codice che non genera eccezioni controllate, puoi passare il codice a AWSXRay.CreateSubsegment come 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' X-Ray SDK for Java genera un ID per esso e registra l'ora di inizio e l'ora di 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 multithread, è necessario passare manualmente il sottosegmento al endSubsegment() metodo per assicurarvi che sia chiuso correttamente, poiché il contesto può essere modificato durante l'esecuzione asincrona. X-Ray Se un sottosegmento asincrono viene chiuso dopo la chiusura del segmento principale, questo metodo trasmetterà automaticamente l'intero segmento al demone. X-Ray

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