การปฏิบัติงานที่ยาวนาน
การดําเนินการที่ใช้เวลานาน (LRO) เป็นงานที่ใช้เวลานานแบบอะซิงโครนัส ซึ่งช่วยให้การโพลล์แบบอะซิงโครนัสในขณะที่ยังคงรักษาการตอบสนองและการปรับขนาด การโพลล์อ้างอิงถึงรูปแบบไคลเอ็นต์ที่จําเป็นในการตรวจสอบสถานะการดําเนินการเป็นระยะ ๆ จนกว่าการดําเนินการจะเสร็จสมบูรณ์
ในบริบทของบริการเว็บและ API LROs หมายถึงงานหรือกระบวนการที่จําเป็นต้องมีระยะเวลาในการดําเนินการทําให้ LROs ไม่เหมาะสมสําหรับการทําให้เสร็จสมบูรณ์ทันทีภายในรอบการตอบกลับคําขอเดียว
ตัวอย่างของการดําเนินการดังกล่าวรวมถึงการอัปโหลดข้อมูลขนาดใหญ่ การคํานวณที่ซับซ้อน การประมวลผลชุดงาน หรือการจัดเตรียมทรัพยากรในสภาพแวดล้อมระบบคลาวด์ การดําเนินการทํางานที่นานทั้งหมดไม่ได้มีผลใน Fabric การดําเนินการบางอย่างเพียงแค่ทํางานจนเสร็จสมบูรณ์โดยไม่ต้องให้ URL ผลลัพธ์ใด ๆ
ข้อมูลจําเพาะของ API
API ที่ใช้โครงสร้างพื้นฐานของ LRO จะส่งกลับผลลัพธ์ที่สําเร็จหนึ่งรายการจากสองรายการ:
- รหัสสถานะ HTTP 200 ตกลง หรือ 201 CREATED - เนื้อหาคําตอบประกอบด้วยผลลัพธ์ API ถ้ามีผลลัพธ์อยู่
- ยอมรับรหัสสถานะ HTTP 202 - เนื้อความการตอบสนองว่างเปล่า
ส่วนหัวของการตอบกลับสามรายการจะถูกเพิ่มโดยอัตโนมัติโดยโครงสร้างพื้นฐาน LRO:
-
Location header
: มี URL สําหรับการโพลล์สถานะของการดําเนินการ -
x-ms-operation-id header
: มี ID การดําเนินการ ซึ่งสามารถใช้เพื่อสร้าง URL สถานะการดําเนินการ -
Retry-After header
: ประกอบด้วยจํานวนเต็มที่แสดงจํานวนวินาทีที่ผู้เรียกควรรอก่อนที่จะสอบถามสถานะของการดําเนินการ
การโพลล์ในสถานะและได้รับผลลัพธ์
คุณสามารถใช้สองวิธีในการโพลล์ในสถานะและรับผลลัพธ์เมื่อการดําเนินการเสร็จสมบูรณ์:
การใช้ ส่วนหัวของตําแหน่งที่ตั้ง: ส่วนหัวของตําแหน่งที่ตั้งที่ส่งกลับในขณะที่การดําเนินการกําลังทํางาน คือ รับ Operation State API ที่มี ID การดําเนินการสําหรับการดําเนินการที่กําลังดําเนินอยู่ เมื่อการดําเนินการทํางานเสร็จสมบูรณ์ ส่วนหัวของตําแหน่งที่ตั้งที่ส่งกลับจะเป็น รับผลลัพธ์การดําเนินการ API ที่มี ID การดําเนินการและผลลัพธ์
การใช้ x-ms-operation-id: คุณสามารถสร้างการเรียกใช้ API ที่ส่งกลับในส่วนหัวของการดําเนินการโดยใช้ x-ms-operation-id header ที่ส่งกลับในการตอบสนองของการเรียกเริ่มต้น ดึงสถานะด้วยรับสถานะการดําเนินการ API โดยใช้ ID การดําเนินการและรับผลลัพธ์ด้วยรับ API ผลลัพธ์การดําเนินการ (โดยใช้ ID การดําเนินการ)
ตัวอย่างรหัส 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: สํารวจสมุดบันทึก
สํารวจการเพิ่มขึ้นของสมุดบันทึกโดยใช้ รับสถานะการดําเนินการ
Notebook 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 ตกลง ร่างกายตอบสนอง:
{
"status": "Succeeded",
"createdTimeUtc": "2023-11-13T22:25:06.1193103",
"lastUpdatedTimeUtc": "2023-11-13T22:25:09.0255787",
"percentComplete": 100,
"error": null
}
ลําดับขั้นที่ 4: รับผลการดําเนินการของสมุดบันทึก 2
รับผลลัพธ์การดําเนินการสําหรับสมุดบันทึก 2 ที่มี รับผลการดําเนินการ
รับ 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"
}