

Phân tích yêu cầu
- Ứng dụng Azure Durable Function xử lý danh sách đầu vào.
- Ứng dụng cần ghi nhận lỗi mà không làm thất bại toàn bộ quá trình.
- Dữ liệu lỗi phải có sẵn cho ứng dụng giám sát (monitoring console).
Phân tích từng đoạn code
1. Chọn phương thức xử lý lỗi trong Durable Orchestrator
Lựa chọn | Phân tích | Chọn không? |
---|---|---|
context.SetOutput(input[errIndex]) | SetOutput được dùng để đặt đầu ra cuối cùng của function, không phù hợp để ghi log lỗi. | |
context.SetCustomStatus(input[errIndex]) | SetCustomStatus cho phép lưu trạng thái tùy chỉnh trong quá trình chạy của function, phù hợp để ghi nhận lỗi. | |
context.SignalEntity(input[errIndex], “error”) | SignalEntity chỉ dùng để gửi tín hiệu đến Durable Entity, không phải để lưu lỗi. | |
await context.CallEntityAsync(input[errIndex], “error”) | CallEntityAsync dùng để gọi một Durable Entity, không phù hợp với mục tiêu lưu lỗi. |
Lựa chọn chính xác:
context.SetCustomStatus(input[errIndex])
.
2. Kiểm tra trạng thái trong monitoring console
Lựa chọn | Phân tích | Chọn không? |
---|---|---|
Failed | ||
Awaited | Awaited không phải là trạng thái của Durable Function. | |
Listening | ||
Completed | runtimeStatus là trường trong Durable Functions chứa trạng thái thực thi, bao gồm “Completed”. |
Lựa chọn chính xác:
Completed
.
3. Chọn biến để lấy trạng thái của function
Lựa chọn | Phân tích | Chọn không? |
---|---|---|
input | ||
output | output chỉ chứa dữ liệu trả về cuối cùng. | |
runtimeStatus | runtimeStatus là giá trị cần kiểm tra để biết function đã hoàn thành chưa. | |
customStatus | customStatus chứa trạng thái tùy chỉnh, không phải trạng thái chính của function. |
Lựa chọn chính xác:
runtimeStatus
.
Đáp án chính xác
Vị trí | Giá trị đúng |
---|---|
Đặt lỗi trong Orchestrator | context.SetCustomStatus(input[errIndex]) |
Kiểm tra trạng thái function | "Completed" |
Trường kiểm tra trong JSON | runtimeStatus |
Lựa chọn này đảm bảo lỗi không làm thất bại toàn bộ function và có thể giám sát từ bên ngoài!
So sánh lời giải với phân tích trước đó
Box 1: await context.CallEntityAsync(input[errIndex], "error")
- Lời giải chọn
CallEntityAsync
, nhưng đây không phải là cách tốt nhất để lưu trạng thái lỗi. - Giải pháp đúng hơn:
context.SetCustomStatus(input[errIndex])
→ VìSetCustomStatus
lưu trạng thái lỗi mà không làm hỏng toàn bộ function. Sai, nên chọn
context.SetCustomStatus(input[errIndex])
.
Box 2: Failed
- Lời giải chọn
Failed
, nhưng yêu cầu là “single instance of invalid input does not cause the function to fail”. - Nếu function không bị lỗi hoàn toàn, nó không nên có
runtimeStatus = Failed
. - Giải pháp đúng hơn:
Completed
, vì function vẫn chạy và lưu trạng thái lỗi trongcustomStatus
. Sai, nên chọn
Completed
.
Box 3: Input
- Lời giải chọn
Input
, nhưng đây không phải giá trị đúng để lấy trạng thái runtime của function. - Giải pháp đúng hơn:
runtimeStatus
, vì cần kiểm tra trạng thái thực thi function. Sai, nên chọn
runtimeStatus
.
Kết luận
Box | Lời giải đã chọn | Đúng/Sai? | Lựa chọn đúng |
---|---|---|---|
Box 1 | await context.CallEntityAsync(input[errIndex], "error") | context.SetCustomStatus(input[errIndex]) | |
Box 2 | Failed | Completed | |
Box 3 | Input | runtimeStatus |
Lời giải đưa ra không chính xác! Đáp án đúng phải là:
context.SetCustomStatus(input[errIndex])
Completed
runtimeStatus