Langvarige handlinger
En langvarig handling (LRO) er en asynkron tidskrævende opgave, der muliggør asynkron polling, samtidig med at svartid og skalerbarhed bevares. Polling refererer til det klientmønster, der kræves for jævnligt at kontrollere handlingsstatus, indtil handlingen er fuldført.
I forbindelse med webtjenester og API'er refererer LRO'er til opgaver eller processer, der kræver en betydelig mængde tid at udføre, hvilket gør LRO'er uegnede til øjeblikkelig fuldførelse inden for en enkelt anmodningssvarcyklus.
Eksempler på sådanne handlinger omfatter store dataoverførsler, komplekse beregninger, batchbehandling eller klargøring af ressourcer i cloudmiljøer. Ikke alle langvarige handlinger har et resultat i Fabric. Nogle handlinger kører blot til fuldførelse uden at angive nogen resultat-URL-adresse.
API-specifikation
En API, der bruger LRO-infrastrukturen, returnerer et af to vellykkede resultater:
- HTTP-statuskode 200 OK eller 201 CREATED – Svarteksten indeholder API-resultatet, hvis der findes et resultat.
- HTTP-statuskode 202 Accepteret – Svarteksten er tom.
Der tilføjes automatisk tre svarheadere af LRO-infrastrukturen:
-
Location header
: Indeholder URL-adressen til afstemning af handlingens status. -
x-ms-operation-id header
: Indeholder handlings-id'et, som kan bruges til at konstruere URL-adressen for handlingsstatus. -
Retry-After header
: Indeholder et heltal, der repræsenterer det antal sekunder, en kalder skal vente, før der forespørger om handlingens status.
Polling om tilstand og hentning af resultater
Der er to metoder, du kan benytte til at forespørge om tilstanden og få resultatet, når handlingen er fuldført:
Brug placeringsheader: Den placeringsheader, der returneres, mens handlingen kører, er API'en Hent handlingstilstand med handlings-id'et for den igangværende handling. Når handlingen er fuldført, er den returnerede placeringsheader API'en Get Operation Result med handlings-id'et og resultatet.
Ved hjælp af x-ms-operation-id: Du kan oprette API-kald, der returnerer i handlingsheaderen, ved hjælp af den x-ms-operation-id-header, der returneres i svaret på det første kald. Træk tilstanden med API'en Get Operation State ved hjælp af handlings-id'et, og hent resultatet med Get Operation Result API (ved hjælp af handlings-id'et).
C#-kodeeksempel til afstemning af handlingstilstanden
// 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");
Eksempel på oprettelse af element
Dette er et eksempel på en LRO-handling. I dette eksempel oprettede brugeren to notesbøger.
Fase 1: Opret to notesbøger
Opret to notesbøger.
Fase 2: Poller notesbøgerne
Poll notesbogens cretion ved hjælp af Hent handlingstilstand.
notesbog 1 – returnerer 201
. Handlingen er fuldført.
{
"id": "551e6a4d-d81a-4079-b08c-25cec3cebba9",
"type": "Notebook",
"displayName": "Notebook1",
"description": "",
"workspaceId": "a91e61ef-862e-4611-9d09-9c7cc07b2519"
}
notesbog 2 – returnerer 202
. Handlingen er ikke fuldført. Notesbog 2 oprettes ikke.
{
"status": "Running",
"createdTimeUtc": "2023-11-13T22:24:40.477Z",
"lastUpdatedTimeUtc": "2023-11-13T22:24:41.532Z",
"percentComplete": 25
}
Fase 3: Afstemningsnotesbog 2
Vent 20 minutter, og poller notesbog 2 ved hjælp af Get Operation State.
HENT https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78
notesbog 2 – returnerer 201
. Handlingen er fuldført. Notesbog 2 er oprettet.
Handlingen er fuldført – der er en statuskode på 200-OK. Svarbrødtekst:
{
"status": "Succeeded",
"createdTimeUtc": "2023-11-13T22:25:06.1193103",
"lastUpdatedTimeUtc": "2023-11-13T22:25:09.0255787",
"percentComplete": 100,
"error": null
}
Fase 4: Hent resultat af notesbog 2-handling
Hent handlingsresultatet for notesbog 2 med Get Operation Result.
HENT https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78/result
notesbog 2 – returnerer 200
. Notesbog 2 er oprettet.
{
"id": "221a6eea-0f27-41eb-bcc5-e4d7b216ed43",
"type": "Notebook",
"displayName": " Notebook2",
"description": "",
"workspaceId": "a91e61ef-862e-4611-9d09-9c7cc07b2519"
}