標籤是可以附加在編排、活動和子編排上的鍵值對,以加入自訂的元資料。 在工作進行時,使用標籤來分類並關聯。 你也可以用編排標籤來查詢編排實例。
你可以在以下平台新增標籤:
- 編排實例 ——當你從客戶端開始新的編排時。
- 活動 — 當協調器排程活動時。
- 子流程協調 — 當流程協調排程子系流程協調時。
SDK 與擴充套件支援
| SDK 與擴充功能 | 協調標籤 | 活動標籤 | 子編曲標籤 | 閱讀編排標籤 |
|---|---|---|---|---|
Durable Task .NET SDK (durabletask-dotnet) |
✅ | ✅ | ✅ | ✅ |
Durable Task JavaScript SDK (durabletask-js) |
✅ | ✅ | ✅ | ✅ |
Durable Task Python SDK (durabletask-python) |
✅ | ✅ | ❌ |
❌ (未顯示於 OrchestrationState) |
Durable Task Java SDK (durabletask-java) |
✅ (v1.6.0+) |
❌(TaskOptions 僅供重試) |
❌ | ✅ |
| Durable Functions:.NET 隔離式方案 | ✅ | ✅ | ✅ | ✅ |
| Durable Functions:.NET 進行中 | ❌ | ❌ | ❌ | ❌ |
| Durable Functions:JavaScript | ❌ | ❌ | ❌ | ❌ |
| Durable Functions:Python | ❌ | ❌ | ❌ | ❌ |
| Durable Functions:Java | ✅ | ❌ | ❌ | ✅ |
標籤的運作方式
當你排程編排、活動或子編曲時,你可以提供字串鍵值對的字典作為標籤。 耐用任務排程器會根據你標記的標籤類型,以不同的方式儲存和暴露標籤:
- 編排標籤 會以中繼資料的形式儲存在編排實例上。 你在呼叫子編排時提供的標籤會成為子調度實例的元資料。 你可以閱讀這些標籤,並依標籤篩選編排實例。
- 活動標籤 會儲存在該活動排程事件的父程式編排歷史中。 你可以在協調流程歷程記錄中查看它們,但它們不會被建立索引,也無法在協調流程標籤查詢中查詢到。 活動標籤也不會傳遞給活動函式。
在排程編排、活動或子編曲時設定標籤。 之後你不能再更改標籤。
設定自訂顯示名稱
使用眾所周知的 durabletask.displayName 標籤,為協調流程、子協調流程或活動指定一個名稱,供檢視執行情形的人員查看。 當該標籤值非空時,Durable Task Scheduler 儀表板會在原本會顯示註冊名稱的地方顯示該值,包括協調清單、流程與序列視圖,以及詳細面板。
註冊名稱不會被丟棄或更改。 它仍然存在儀表板工具提示和細節中,且自訂顯示名稱不會影響執行的程式碼。 如果標籤遺失或空,儀表板會照常顯示註冊名稱。
Important
durabletask. 前綴為平台保留。 儀表板會將鍵以 開 durabletask. 頭的標籤從一般標籤列表中隱藏,因此平台標籤(如 durabletask.displayName,)不會同時以解譯元資料或原始標籤的形式出現。 不要在 durabletask. 前綴下自行建立標籤鍵。
在編排實例中新增標籤
var options = new StartOrchestrationOptions
{
InstanceId = "order-12345",
Tags = new Dictionary<string, string>
{
{ "environment", "production" },
{ "tenant", "contoso" },
},
};
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(
"ProcessOrderOrchestration", input: order, options: options);
為活動新增標籤
var options = new TaskOptions(tags: new Dictionary<string, string>
{
{ "scheduleId", scheduleId },
});
await context.CallActivityAsync(nameof(CacheClearingActivity), options);
新增標籤到子流程協調
var options = new SubOrchestrationOptions
{
Tags = new Dictionary<string, string>
{
{ "workflowType", "order-processing" },
},
};
await context.CallSubOrchestratorAsync(
"ValidateOrderOrchestration", input: order, options: options);
閱讀編排標籤
OrchestrationMetadata? instance = await client.GetInstanceAsync(instanceId);
if (instance is not null)
{
foreach (KeyValuePair<string, string> tag in instance.Tags)
{
Console.WriteLine($"{tag.Key} = {tag.Value}");
}
}
查詢標籤
在 Durable Task Scheduler 儀表板中,使用 Tag 篩選 器,依照編排標籤篩選編排實例。 篩選器會比對標籤鍵或值。 編排清單也會以欄位顯示編排標籤。
活動標籤會出現在該活動排程事件的編排歷史中。 它們不包含在編排清單的 標籤過濾器中。
標籤指引
- 使用一致的鍵—— 遵循命名慣例,以便可靠地過濾編排實例並關聯活動。
- 保持標籤有意義 — 使用能提供上下文的價值。
- 使用字串值 — 鍵值和值就是字串。
- Mind 協調標籤大小 — 完整的 JSON 序列化協調標籤字典大小最多可達 1,000 位元組。 此限制包含所有鍵和值,且每個多位元組 UTF-8 字元會計為一個以上的位元組。 活動標籤不使用這個協調實例的元資料限制,但它們會增加編排歷史大小。
Limitations
- 在已排定編排、活動或子編排之後,標籤即不可變更。
- 標籤鍵和值是字串。
- 你可以檢查編排歷史中的活動標籤,但無法查詢它們。 你也無法把它們傳給活動函數。