Condividi tramite


Operazioni a esecuzione prolungata

Un'operazione a esecuzione prolungata (LRO) è un'attività asincrona che richiede tempo, consentendo il polling asincrono e mantenendo la reattività e la scalabilità. Il polling si riferisce al modello client necessario per controllare periodicamente lo stato di un'operazione finché l'operazione non viene completata.

Nel contesto di servizi Web e API, gli LRO fanno riferimento a attività o processi che richiedono una notevole quantità di tempo per l'esecuzione, rendendo gli LRO non adatti per il completamento immediato all'interno di un singolo ciclo di risposta alle richieste.

Esempi di queste operazioni includono caricamenti di dati di grandi dimensioni, calcoli complessi, elaborazione batch o provisioning di risorse in ambienti cloud. Non tutte le operazioni a esecuzione prolungata hanno un risultato in Fabric. Alcune operazioni vengono eseguite solo fino al completamento senza fornire alcun URL di risultato.

Specifiche dell'API

Un'API che usa l'infrastruttura LRO restituisce uno dei due risultati riusciti:

  • Codice di stato HTTP 200 OK o 201 CREATED: il corpo della risposta contiene il risultato dell'API, se esiste un risultato.
  • Codice di stato HTTP 202 Accettato: il corpo della risposta è vuoto.

Tre intestazioni di risposta vengono aggiunte automaticamente dall'infrastruttura LRO:

  • Location header: Contiene l'URL per il controllo dello stato dell'operazione.
  • x-ms-operation-id header: contiene l'ID operazione, che può essere usato per costruire l'URL dello stato dell'operazione.
  • Retry-After header: contiene un numero intero che rappresenta il numero di secondi di attesa di un chiamante prima di eseguire una query sullo stato dell'operazione.

Sondaggio sullo stato e ottenimento dei risultati

Esistono due approcci che è possibile adottare per eseguire il polling sullo stato e ottenere il risultato al termine dell'operazione:

  • Usando 'intestazione della posizione: l'intestazione del percorso restituita, mentre l'operazione è in esecuzione, è l'API Get Operation State con l'ID operazione per l'operazione in corso. Al termine dell'esecuzione dell'operazione, l'intestazione della posizione restituita è quella dell'API Get Operation Result, con l'ID dell'operazione e il risultato.

  • Usando x-ms-operation-id: è possibile compilare chiamate API restituite nell'intestazione dell'operazione usando l'intestazione x-ms-operation-id restituita nella risposta della chiamata iniziale. Eseguire il pull dello stato con l'API Get Operation State usando l'ID operazione e ottenere il risultato con l'API Get Operation Result (usando l'ID operazione).

Esempio di codice C# per il polling dello stato dell'operazione

// Get operationUrl from location header or by building it with operation ID and Get State API.  
do 
{ 
  Thread.Sleep(retryAfter * 1000); // Get retryAfter value from Retry-After header. 
  response = client.GetAsync(operationUrl).Result;  
  jsonOperation = response.Content.ReadAsStringAsync().Result; 
  operation = JsonSerializer.Deserialize<FabricOperation>(jsonOperation); 
} while (operation.status != "Succeeded" && operation.status != "Failed"); 

Esempio di creazione di elementi

Questo è un esempio di operazione LRO. In questo esempio l'utente ha creato due notebook.

Fase 1: Creare due notebook

Creare due notebook.

Fase 2: Eseguire il polling dei notebook

Eseguire il polling per la creazione del notebook utilizzando Get Operation State.

Notebook 1 : restituisce 201. L'operazione è stata completata.

{ 
  "id": "551e6a4d-d81a-4079-b08c-25cec3cebba9", 
  "type": "Notebook", 
  "displayName": "Notebook1", 
  "description": "", 
  "workspaceId": "a91e61ef-862e-4611-9d09-9c7cc07b2519" 
} 

Notebook 2: restituisce 202. L'operazione non è stata completata. Il notebook 2 non è stato creato.

{ 
"status": "Running", 
"createdTimeUtc": "2023-11-13T22:24:40.477Z", 
"lastUpdatedTimeUtc": "2023-11-13T22:24:41.532Z", 
"percentComplete": 25 
} 

Fase 3: Notebook di sondaggio 2

Attendere 20 minuti e quindi interrogare il notebook 2 usando Get Operation State.

GET https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78

Notebook 2: restituisce 201. L'operazione è stata completata. Viene creato il notebook 2.

Operazione completata: è stato ottenuto il codice di stato http 200-OK. Corpo della risposta:

{ 
  "status": "Succeeded", 
  "createdTimeUtc": "2023-11-13T22:25:06.1193103", 
  "lastUpdatedTimeUtc": "2023-11-13T22:25:09.0255787", 
  "percentComplete": 100, 
  "error": null 
} 

Fase 4: Ottenere il risultato dell'operazione del notebook 2

Ottieni il risultato dell'operazione per il notebook 2 con Ottieni il risultato dell'operazione.

GET https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78/result

Notebook 2: restituisce 200. Viene creato il notebook 2.

{ 
"id": "221a6eea-0f27-41eb-bcc5-e4d7b216ed43", 
"type": "Notebook", 
"displayName": " Notebook2", 
"description": "", 
"workspaceId": "a91e61ef-862e-4611-9d09-9c7cc07b2519" 
}