Поделиться через


Длительные операции

Длительная операция (LRO) — это асинхронная времязатратная задача, которая позволяет выполнять асинхронный опрос, сохраняя при этом скорость реагирования и масштабируемость. Опрос ссылается на шаблон клиента, необходимый для периодической проверки состояния операции до завершения операции.

В контексте веб-служб и API LROs относятся к задачам или процессам, которым требуется значительное время выполнения, что делает LROs непригодными для немедленного завершения в рамках одного цикла ответа на запрос.

Примеры таких операций включают передачу больших данных, сложные вычисления, пакетную обработку или подготовку ресурсов в облачных средах. Не все длительные операции имеют результат в Fabric. Некоторые операции просто выполняются до завершения без предоставления URL-адреса результата.

Спецификация API

API, использующий инфраструктуру LRO, возвращает один из двух успешных результатов:

  • Код состояния HTTP 200 OK или 201 CREATE — текст ответа содержит результат API, если результат существует.
  • Код состояния HTTP 202 Принят. Текст ответа пуст.

Три заголовка ответа автоматически добавляются инфраструктурой LRO:

  • Location header: содержит URL-адрес для опроса состояния операции.
  • x-ms-operation-id header: содержит идентификатор операции, который можно использовать для создания URL-адреса состояния операции.
  • Retry-After header: содержит целое число, представляющее количество секунд, которое вызывающий объект должен ждать, прежде чем запрашивать состояние операции.

Опрос состояния и получение результата

Существует два подхода, которые можно использовать для мониторинга состояния и получения результата после завершения операции.

  • Использование заголовка расположения: возвращаемый заголовок во время выполнения операции указывает на API "Получить состояние операции" с идентификатором текущей операции. После завершения выполнения операции возвращается заголовок локации — API для получения результата операции с идентификатором операции и результатом.

  • Используя x-ms-operation-id: можно создавать вызовы API, возвращаемые в заголовке операции, с помощью заголовка x-ms-operation-id, возвращаемого в ответе на начальный вызов. Извлеките состояние с помощью API получения состояния операции, используя идентификатор операции, и получите результат с помощью API получения результатов операции (с использованием идентификатора операции).

Пример кода C# для опроса состояния операции

// 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"); 

Пример создания элемента

Это пример операции LRO. В этом примере пользователь создал две записные книжки.

Этап 1. Создание двух записных книжек

Создайте две записные книжки.

Этап 2. Опрос записных книжек

Опрос состояния создания записной книжки с помощью Get Operation State.

Записная книжка 1 - Возвращается 201. Операция завершена.

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

Записная книжка 2 — возвращает 202. Операция не завершена. Блокнот 2 не создан.

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

Этап 3. Опросный блокнот 2

Подождите 20 минут, а затем проводите опрос ноутбука 2 с помощью Получить состояние операции.

ПОЛУЧИТЬ https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78

Записная книжка 2 — возвращает 201. Операция завершена. Записная книжка 2 создана.

Операция завершена — получен код состояния HTTP 200-OK. Текст ответа:

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

Этап 4. Получение результата операции тетради №2

Получите результат операции для записной книжки 2 с помощью Get Operation Result.

ПОЛУЧИТЬ https://api.fabric.microsoft.com/v1/operations/b80e135a-adca-42e7-aaf0-59849af2ed78/result

Записная книжка 2 — возвращается 200. Записная книжка 2 создана.

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