Durable Functions 延伸模組推出了三個觸發程序繫結,可控制協調器、實體與活動函式的執行。 它也引進了輸出繫結,可作為長期函式執行階段的用戶端。
本文討論這四個繫結的使用方式,並提供程式碼範例。 同時也說明了「host.json」(包含會影響函式應用程式中所有函式之設定的中繼資料檔案) 中的 Durable Functions 設定屬性。
請務必在文章頂端選取您的 Durable Functions 開發語言。
Durable Functions 支援 Azure Functions 的兩個版本的 Python 程式設計模型 。 由於 Python v2 是建議的版本,因此本文中的範例僅提供此版本。
先決條件
- Durable Functions SDK,即Python套件索引(PyPI)套件
azure-functions-durable、版本1.2.2或更高版本 - 延伸套件組合 4.x 版 (或更新版本) ,設定在 host.json 專案檔中
您可以在適用於 Python 的 Durable Functions SDK 存放庫中提供意見反應和建議。
協調流程觸發程序
您可以使用協調流程觸發程序來開發 持久的協調器函式。 當排程新的協調流程執行個體,以及現有協調流程執行個體接收到事件時,就會執行此觸發程序。 可以觸發協調器函式的事件範例包括長期定時器到期、活動函式回應,以及外部用戶端所引發的事件。
當您在 .NET 中開發函式時,您會使用 OrchestrationTriggerAttribute .NET 屬性來設定協調流程觸發程式。
對於 Java,您可以使用 @DurableOrchestrationTrigger 註解來設定編排觸發器。
當您使用 Node.js 程式設計模型第 4 版來開發函數時,您會從模組匯app入@azure/functions npm物件。 然後,您可以直接在函式程式碼中呼叫 app.orchestration Durable Functions API 的方法。 這個方法會向 Durable Functions 架構註冊您的協調器函式。
當您撰寫協調器函式時,您可以使用 bindings 檔案陣列中的下列 JSON 物件來定義協調流程觸發程序:
{
"name": "<name-of-input-parameter-in-function-signature>",
"orchestration": "<optional-name-of-orchestration>",
"type": "orchestrationTrigger",
"direction": "in"
}
此 orchestration 值是用戶端想要啟動協調器函式的新執行個體時必須使用的協調流程名稱。 這個屬性為選擇性。 如果您未指定,則會使用函數的名稱。
當您使用 Python v2 程式設計模型時,您可以直接在 orchestration_trigger Python 函式程式碼中使用裝飾器來定義協調觸發器。
在 v2 模型中,您可以從 DFApp 的實例存取 Durable Functions 觸發程式和繫結。 您可以使用 的 FunctionApp 這個子類別來匯出 Durable Functions 特有的裝飾器。
在內部,此觸發程序繫結會輪詢已設定的長期存放區以取得新的協調流程事件。 事件的範例包括協調流程啟動事件、持久計時器到期事件、活動函式回應事件,以及其他函式引發的外部事件。
觸發行為
以下是協調流程觸發程序的一些附註:
- 單一執行緒:單一調度器執行緒用於單一主機執行個體上的所有協調器函式執行。 因此,請務必確保協調器函式程式碼有效率,而且不會執行任何 I/O 作業。 此外,請務必確保此執行緒不會執行任何非同步工作,除非等候 Durable Functions 特有的工作類型。
- 有害訊息處理:編排觸發器中不支援有害訊息。
- 訊息能見度:協作觸發訊息會從佇列中移除,並在可設定的時間內保持不可見狀態。 只要函式應用程式正在執行且狀況良好,這些訊息的可見性就會自動更新。
- 傳回值:傳回值會序列化為 JSON,並保存至 Azure 資料表儲存體中的協調流程歷程記錄資料表。 協調流程用戶端系結可查詢這些傳回值,稍後說明。
警告
協調器函式絕對不應該使用協調流程觸發程式系結以外的任何輸入或輸出系結。 使用其他繫結可能會導致 Durable Task 延伸模組發生問題,因為這些繫結可能不會遵循單一執行緒和 I/O 規則。 如果您想使用其他繫結,請將這些繫結新增至從協調器函式呼叫的活動函式。 如需 Orchestrator 函式編碼條件約束的詳細資訊,請參閱 Orchestrator 函式程式碼條件約束。
警告
協調器函式永遠不應該聲明為async形式。
觸發程序使用方式
協調流程觸發程序繫結支援輸入及輸出。 以下是有關輸入和輸出處理的一些注意事項:
- 輸入:您可以叫用具有輸入參數的協調觸發程式。 輸入是透過內容輸入物件存取的。 所有輸入都必須是 JSON 可串行化。
- 輸出:協調流程觸發程式同時支援輸出和輸入值。 函數的傳回值可用來指派輸出值。 傳回值必須是 JSON 序列化的。
觸發程序範例
下列程式碼提供基本 Hello World 協調器函式的範例。 此範例協調器不會排程任何工作。
您用來定義觸發程序的屬性取決於您是在 與 Functions 主機進程相同的進程中 執行 C# 函式,還是在 隔離的背景工作進程中執行。
[FunctionName("HelloWorld")]
public static string RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
return $"Hello {name}!";
}
備註
上述程式碼適用於 Durable Functions 2.x。 針對 Durable Functions 1.x,您必須使用 DurableOrchestrationContext 而非 IDurableOrchestrationContext。 如需版本之間差異的詳細資訊,請參閱 Durable Functions 版本概觀。
const { app } = require('@azure/functions');
const df = require('durable-functions');
df.app.orchestration('helloOrchestrator', function* (context) {
const name = context.df.getInput();
return `Hello ${name}`;
});
備註
函式庫會在 durable-functions 產生器函式結束時呼叫同步 context.done 方法。
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@myApp.orchestration_trigger(context_name="context")
def my_orchestrator(context):
result = yield context.call_activity("Hello", "Tokyo")
return result
param($Context)
$InputData = $Context.Input
$InputData
@FunctionName("HelloWorldOrchestration")
public String helloWorldOrchestration(
@DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
return String.format("Hello %s!", ctx.getInput(String.class));
}
大部分的協調器函式都會呼叫活動函式。 下列程式碼提供 Hello World 範例,示範如何呼叫活動函式:
[FunctionName("HelloWorld")]
public static async Task<string> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
string result = await context.CallActivityAsync<string>("SayHello", name);
return result;
}
備註
上述程式碼適用於 Durable Functions 2.x。 針對 Durable Functions 1.x,您必須使用 DurableOrchestrationContext 而非 IDurableOrchestrationContext。 如需版本之間差異的詳細資訊,請參閱 Durable Functions 版本概觀。
const { app } = require('@azure/functions');
const df = require('durable-functions');
const activityName = 'hello';
df.app.orchestration('helloOrchestrator', function* (context) {
const name = context.df.getInput();
const result = yield context.df.callActivity(activityName, name);
return result;
});
@FunctionName("HelloWorld")
public String helloWorldOrchestration(
@DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
String input = ctx.getInput(String.class);
String result = ctx.callActivity("SayHello", input, String.class).await();
return result;
}
活動觸發程序
您可以使用活動觸發器來開發由協調器函式呼叫的 活動函式。
您可以使用 ActivityTriggerAttribute .NET 屬性來設定活動觸發程式。
您可使用 @DurableActivityTrigger 註釋來設定活動觸發器。
若要註冊活動函數,請從 @azure/functions npm 模組匯入 app 物件。 然後,您可以直接在函式程式碼中呼叫 app.activity Durable Functions API 的方法。
若要定義活動觸發器,您可以在陣列中使用 bindings 下列JSON物件 function.json:
{
"name": "<name-of-input-parameter-in-function-signature>",
"activity": "<optional-name-of-activity>",
"type": "activityTrigger",
"direction": "in"
}
值 activity 是活動的名稱。 這個值是協調器函式用來叫用此活動函式的名稱。 這個屬性為選擇性。 如果您未指定,則會使用函數的名稱。
您可以直接在 activity_trigger Python 函式程式碼中使用裝飾器來定義活動觸發程式。
在內部,觸發程序繫結會輪詢已設定的長期存放區以取得新的活動執行事件。
觸發行為
以下是活動觸發程序的一些附註:
- 執行緒:與協調流程觸發程式不同,活動觸發程式對執行緒或 I/O 作業沒有任何限制。 它們可以視為一般函式。
- 有害訊息處理:活動觸發程式中不支援有害訊息。
- 訊息可見度:活動觸發訊息會被出列,並在可設定的持續時間內保持不可見。 只要函式應用程式正在執行且狀況良好,這些訊息的可見性就會自動更新。
- 傳回值:傳回值會序列化為 JSON,並保存至已設定的持久存放區。
觸發程序使用方式
活動觸發器繫結同時支援輸入和輸出,就像編排觸發器一樣。 以下是有關輸入和輸出處理的一些注意事項:
- 輸入:活動觸發程式可以使用協調器函式的輸入來叫用。 所有輸入都必須是 JSON 可串行化。
- 輸出:活動函數同時支援輸出和輸入值。 函式的傳回值是用來指派輸出值,而且必須是 JSON 可串行化。
-
中繼資料:.NET 活動函式可以系結至
string instanceId參數,以取得呼叫協調流程的執行個體識別碼。
觸發程序範例
下列程式碼提供基本 Hello World 活動函式的範例。
[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] IDurableActivityContext helloContext)
{
string name = helloContext.GetInput<string>();
return $"Hello {name}!";
}
.NET ActivityTriggerAttribute 繫結的預設參數類型是 IDurableActivityContext (或 Durable Functions 1.x 的 DurableActivityContext )。 不過,.NET 活動觸發程式也支援直接系結至 JSON 序列化類型 (包括基本類型) ,因此您也可以使用下列簡化版本的函式:
[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
return $"Hello {name}!";
}
const { app } = require('@azure/functions');
const df = require('durable-functions');
const activityName = 'hello';
df.app.activity(activityName, {
handler: (input) => {
return `Hello, ${input}`;
},
});
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@myApp.activity_trigger(input_name="myInput")
def my_activity(myInput: str):
return "Hello " + myInput
param($name)
"Hello $name!"
@FunctionName("SayHello")
public String sayHello(@DurableActivityTrigger(name = "name") String name) {
return String.format("Hello %s!", name);
}
使用輸入和輸出繫結
除了活動觸發繫結之外,您也可以使用一般輸入和輸出繫結。
例如,活動函式可以接收來自協調器函式的輸入。 然後,活動函式可以將該輸入作為訊息傳送至 Azure 事件中樞。
const { app } = require('@azure/functions');
const df = require('durable-functions');
df.app.orchestration('helloOrchestrator', function* (context) {
const input = context.df.getInput();
yield context.df.callActivity('sendToEventHub', input);
return `Message sent: ${input}`;
});
const { EventHubProducerClient } = require("@azure/event-hubs");
const connectionString = process.env.EVENT_HUB_CONNECTION_STRING;
const eventHubName = process.env.EVENT_HUB_NAME;
df.app.activity("sendToEventHub", {
handler: async (message, context) => {
const producer = new EventHubProducerClient(connectionString, eventHubName);
try {
const batch = await producer.createBatch();
batch.tryAdd({ body: message });
await producer.sendBatch(batch);
context.log(`Message sent to Event Hubs: ${message}`);
} catch (err) {
context.log.error("Failed to send message to Event Hubs:", err);
throw err;
} finally {
await producer.close();
}
},
});
app.storageQueue('helloQueueStart', {
queueName: 'start-orchestration',
extraInputs: [df.input.durableClient()],
handler: async (message, context) => {
const client = df.getClient(context);
const orchestratorName = message.orchestratorName || 'helloOrchestrator';
const input = message.input || null;
const instanceId = await client.startNew(orchestratorName, { input });
context.log(`Started orchestration with ID = '${instanceId}'`);
},
});
協調流程用戶端
您可以使用協調流程用戶端繫結來撰寫與協調器函式互動的函式。 這些函式通常稱為 用戶端函式。 例如,您可以下列方式處理協調流程執行個體:
- 啟動它們。
- 查詢其狀態。
- 終止它們。
- 在它們執行時傳送事件給它們。
- 清除執行個體歷程記錄。
您可以使用 DurableClientAttribute (英文) 屬性 (Durable Functions 1.x 中的 OrchestrationClientAttribute (英文)) 繫結至協調流程用戶端。
您可以透過使用 @DurableClientInput 註釋來繫結至編排客戶端。
若要註冊用戶端功能,請從模組匯app入@azure/functions npm物件。 然後,您必須呼叫觸發程式類型特有的 Durable Functions API 方法。 例如,對於 HTTP 觸發器,您可以呼叫 app.http 方法。 對於佇列觸發器,您可以呼叫 app.storageQueue 方法。
若要定義持久用戶端觸發程式,請在 bindings陣列中使用下列 JSON 物件:
{
"name": "<name-of-input-parameter-in-function-signature>",
"taskHub": "<optional-name-of-task-hub>",
"connectionName": "<optional-name-of-connection-string-app-setting>",
"type": "orchestrationClient",
"direction": "in"
}
- 當多個函式應用程式共用相同的儲存體帳戶,但需要彼此隔離時,會使用此
taskHub屬性。 如果您未指定此屬性,則會使用 host.json 中的預設值。 此值必須符合目標協調器函式所使用的值。 - 此
connectionName值是包含儲存體帳戶連接字串之應用程式設定的名稱。 此連接字串所代表的儲存體帳戶必須與目標協調器函式使用的儲存體帳戶相同。 如果您未指定此屬性,則會使用函式應用程式的預設儲存體帳戶連接字串。
備註
在大部分情況下,我們建議您省略這些屬性,並依賴預設行為。
您可以直接在 Python 函式程式碼中使用 durable_client_input 裝飾器來定義持久性用戶端觸發器。
用戶端使用方式
您通常會系結至 IDurableClient 的實作 (Durable Functions 1.x 中的 DurableOrchestrationClient ),這可讓您完整存取 Durable Functions 支援的所有協調流程用戶端 API。
您通常會系結至 類別 DurableClientContext 。
您必須使用特定語言的 SDK 來存取客戶端物件。
下列程式碼提供佇列觸發函式的範例,以啟動 Hello World 協調流程。
[FunctionName("QueueStart")]
public static Task Run(
[QueueTrigger("durable-function-trigger")] string input,
[DurableClient] IDurableOrchestrationClient starter)
{
// Orchestration input comes from the queue message content.
return starter.StartNewAsync<string>("HelloWorld", input);
}
備註
上述 C# 程式碼適用於 Durable Functions 2.x。 針對 Durable Functions 1.x,您必須使用 OrchestrationClient 屬性而非 DurableClient 屬性,而且必須使用 DurableOrchestrationClient 參數類型而非 IDurableOrchestrationClient。 如需版本之間差異的詳細資訊,請參閱 Durable Functions 版本概觀。
const { app } = require('@azure/functions');
const df = require('durable-functions');
app.storageQueue('helloQueueStart', {
queueName: 'start-orchestration',
extraInputs: [df.input.durableClient()],
handler: async (message, context) => {
const client = df.getClient(context);
const orchestratorName = message.orchestratorName || 'helloOrchestrator';
const input = message.input || null;
const instanceId = await client.startNew(orchestratorName, { input });
context.log(`Started orchestration with ID = '${instanceId}' from queue message.`);
},
});
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@myApp.queue_trigger(
arg_name="msg",
queue_name="start-orchestration",
connection="AzureWebJobsStorage"
)
@myApp.durable_client_input(client_name="client")
async def client_function(msg: func.QueueMessage, client: df.DurableOrchestrationClient):
input_data = msg.get_body().decode("utf-8")
await client.start_new("my_orchestrator", None, input_data)
return None
function.json
{
"bindings": [
{
"name": "InputData",
"type": "queueTrigger",
"queueName": "durable-function-trigger",
"direction": "in"
},
{
"name": "starter",
"type": "durableClient",
"direction": "in"
}
]
}
run.ps1
param([string]$InputData, $TriggerMetadata)
$InstanceId = Start-DurableOrchestration -FunctionName 'HelloWorld' -Input $InputData
@FunctionName("QueueStart")
public void queueStart(
@QueueTrigger(name = "input", queueName = "durable-function-trigger", connection = "Storage") String input,
@DurableClientInput(name = "durableContext") DurableClientContext durableContext) {
// Orchestration input comes from the queue message content.
durableContext.getClient().scheduleNewOrchestrationInstance("HelloWorld", input);
}
如需啟動執行個體的詳細資訊,請參閱 在 Azure 的 Durable Functions 中管理執行個體。
實體觸發程序
您可以使用實體觸發程式來開發 實體函數。 此觸發器支援處理特定實體實例的事件。
備註
從 Durable Functions 2.x 開始,即可使用實體觸發器。
在內部,此觸發程序繫結會輪詢已設定的長期存放區,以取得需要執行的新實體作業。
您可以使用 EntityTriggerAttribute .NET 屬性來設定實體觸發程式。
若要註冊實體觸發程序,請從 @azure/functions npm 模組匯入 app 物件。 然後,您可以直接在函式程式碼中呼叫 app.entity Durable Functions API 的方法。
const df = require('durable-functions');
df.app.entity('counter', (context) => {
const currentValue = context.df.getState(() => 0);
switch (context.df.operationName) {
case 'add':
context.df.setState(currentValue + context.df.getInput());
break;
case 'reset':
context.df.setState(0);
break;
case 'get':
context.df.return(currentValue);
break;
}
});
備註
Java 尚不支持實體觸發程式。
備註
PowerShell 尚不支援實體觸發程式。
您可以直接使用 entity_trigger 裝飾器在 Python 函式程式碼中定義實體觸發器。
觸發行為
以下是實體觸發程序的一些注意事項:
- 單一執行緒:單一分派器執行緒用於處理特定實體的作業。 如果同時將多個訊息傳送至單一實體,則會一次處理一個作業。
- 有害訊息處理:實體觸發程序中不支援有害訊息。
- 訊息可見度:實體觸發訊息會移出佇列,並在可設定的持續時間內保持不可見。 只要函式應用程式正在執行且狀況良好,這些訊息的可見性就會自動更新。
- 傳回值:實體函式不支援傳回值。 您可以使用特定 API 來儲存狀態或將值傳回協調流程。
在執行期間對實體所做的任何狀態變更都會在執行完成後自動保存。
如需定義實體觸發程式並與之互動的詳細資訊和範例,請參閱 實體函數。
實體用戶端
您可以使用實體用戶端繫結來非同步觸發 實體函式。 這些函式有時稱為 用戶端函式。
您可以使用 .NET 類別庫函式中的 DurableClientAttribute .NET 屬性系結至實體用戶端。
備註
您也可以使用 [DurableClientAttribute] 來繫結到協調流程用戶端。
與其註冊實體用戶端,您可以使用 signalEntity 或 callEntity 從任何已註冊的函式中呼叫實體觸發程序方法。
從佇列觸發函式中,您可以使用
client.signalEntity:const { app } = require('@azure/functions'); const df = require('durable-functions'); app.storageQueue('helloQueueStart', { queueName: 'start-orchestration', extraInputs: [df.input.durableClient()], handler: async (message, context) => { const client = df.getClient(context); const entityId = new df.EntityId('counter', 'myCounter'); await client.signalEntity(entityId, 'add', 5); }, });從協調器函式中,您可以使用
context.df.callEntity:const { app } = require('@azure/functions'); const df = require('durable-functions'); df.app.orchestration('entityCaller', function* (context) { const entityId = new df.EntityId('counter', 'myCounter'); yield context.df.callEntity(entityId, 'add', 5); yield context.df.callEntity(entityId, 'add', 5); const result = yield context.df.callEntity(entityId, 'get'); return result; });
您可以直接在 durable_client_input Python 函式程式碼中使用裝飾器來定義實體用戶端。
備註
Java 尚不支持實體用戶端。
備註
PowerShell 尚不支援實體用戶端。
如需以用戶端身分與實體互動的詳細資訊和範例,請參閱 存取實體。
host.json 中的耐用功能設定
本節提供 host.json中 Durable Functions 組態屬性的相關資訊。 如需 host.json中一般設定的相關資訊,請參閱 Azure Functions 1.x 的host.json 參考 或 Azure Functions 2.x 和更新版本的host.json 參考。
Durable Functions 的組態設定。
備註
Azure Functions 執行階段的所有版本,都支援 Durable Functions 的所有主要版本。 不過, host.json 設定的架構會因 Azure Functions 執行階段的版本和您使用的 Durable Functions 延伸模組版本而略有不同。
下列程式碼提供 durableTask中的兩個設定範例:一個用於 Durable Functions 2.x,另一個用於 Durable Functions 1.x。 您可以將這兩個範例與 Azure Functions 2.0 和 3.0 搭配使用。 使用 Azure Functions 1.0 時,可用的設定相同,但 durableTaskhost.json 區段位於 host.json 組態的根目錄中,而不是 底下的 extensions欄位。
{
"extensions": {
"durableTask": {
"hubName": "MyTaskHub",
"defaultVersion": "1.0",
"versionMatchStrategy": "CurrentOrOlder",
"versionFailureStrategy": "Reject",
"storageProvider": {
"connectionStringName": "AzureWebJobsStorage",
"controlQueueBatchSize": 32,
"controlQueueBufferThreshold": 256,
"controlQueueVisibilityTimeout": "00:05:00",
"FetchLargeMessagesAutomatically": true,
"maxQueuePollingInterval": "00:00:30",
"partitionCount": 4,
"trackingStoreConnectionStringName": "TrackingStorage",
"trackingStoreNamePrefix": "DurableTask",
"useLegacyPartitionManagement": false,
"useTablePartitionManagement": true,
"workItemQueueVisibilityTimeout": "00:05:00",
"QueueClientMessageEncoding": "UTF8"
},
"tracing": {
"traceInputsAndOutputs": false,
"traceReplayEvents": false,
},
"notifications": {
"eventGrid": {
"topicEndpoint": "https://topic_name.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey",
"publishRetryCount": 3,
"publishRetryInterval": "00:00:30",
"publishEventTypes": [
"Started",
"Completed",
"Failed",
"Terminated"
]
}
},
"maxConcurrentActivityFunctions": 10,
"maxConcurrentOrchestratorFunctions": 10,
"maxConcurrentEntityFunctions": 10,
"extendedSessionsEnabled": false,
"extendedSessionIdleTimeoutInSeconds": 30,
"useAppLease": true,
"useGracefulShutdown": false,
"maxEntityOperationBatchSize": 50,
"maxOrchestrationActions": 100000,
"storeInputsInOrchestrationHistory": false
}
}
}
| 財產 | 預設值 | 說明 |
|---|---|---|
| 集線器名稱 | TestHubName (v1.x 中的 DurableFunctionsHub) | 儲存函式應用程式目前狀態的中樞名稱。 任務中樞名稱必須以字母開頭,且只包含字母和數位。 如果您未指定名稱,則會使用預設值。 替代工作中樞名稱可用來將多個 Durable Functions 應用程式彼此隔離,即使它們使用相同的儲存體後端也一樣。 如需詳細資訊,請參閱 工作中樞。 |
| defaultVersion | 指派給新編排實例的預設版本。 當您指定版本時,新的協調流程執行個體會永久與此版本值相關聯。 協調流程版本設定功能會使用此設定,以實現具有重大變更的零停機部署等案例。 您可以使用任何字串值來指定版本。 | |
| 版本匹配策略 | CurrentOrOlder | 此值可指定載入協調器函式時如何比對協調流程版本。 有效值為 None、Strict和 CurrentOrOlder。 如需詳細說明,請參閱 編排版本控制。 |
| versionFailureStrategy | 拒絕 | 此值可指定當協調流程版本不符合目前 defaultVersion 值時,應該執行的動作。 有效值為 Reject 與 Fail。 如需詳細說明,請參閱 協調流程版本管理。 |
| controlQueueBatchSize | 32 | 一次從控制佇列提取的訊息數目。 |
| controlQueueBufferThreshold |
Python 的使用方案:32 其他語言的使用計劃:128 專用或高級計劃:256 |
一次可以在記憶體中緩衝的控制佇列訊息數目。 達到指定數目時,發送器會先等待一會,再從佇列中清除任何其他訊息。 在某些情況下,減少此值可能會大幅降低記憶體耗用量。 |
| partitionCount | 4 | 控制佇列的資料分割計數。 此值必須是介於 1 到 16 之間的正整數。 變更此值需要設定新的工作中樞。 |
| controlQueueVisibilityTimeout | 00:05:00 | 已從控制佇列中清除之訊息的可見度逾時值,格式為「hh:mm:ss」。 |
| workItemQueueVisibilityTimeout | 00:05:00 | 已從工作項目佇列中清除之訊息的可見度逾時值,格式為「hh:mm:ss」。 |
| 自動抓取大容量訊息 | 是 | 指定是否要在協調流程狀態查詢中擷取大型訊息的值。 當此設定為 true時,會擷取超出佇列大小限制的大型訊息。 當此設定為 false時,會擷取指向每個大型訊息的 Blob URL。 |
| maxConcurrentActivityFunctions |
使用量方案:10 專用或高級計劃:當前機器上處理器數量的 10 倍 |
可以在單一主機實例上同時處理的活動函式數目上限。 |
| maxConcurrentOrchestratorFunctions |
消耗計劃:5 專用或高級計劃:當前機器上處理器數量的 10 倍 |
單一主機實例上可同時處理的協調器函式數目上限。 |
| maxConcurrentEntityFunctions |
消耗計劃:5 專用或高級計劃:當前機器上處理器數量的 10 倍 |
可以在單一主機實例上同時處理的實體函式數目上限。 此設定僅適用於您使用 持久工作排程器時。 否則,並行實體執行的數目上限會限制為該 maxConcurrentOrchestratorFunctions 值。 |
| maxQueuePollingInterval | 00:00:30 | 控制佇列和工作項目佇列的輪詢間隔最大值,格式為「hh:mm:ss」。 較高的值可能會導致訊息處理延遲較高。 較低的值可能會導致記憶體成本較高,因為記憶體交易增加。 |
| maxOrchestrationActions | 100,000 | 協調器函數在單一執行週期內可以執行的動作數目上限。 |
| connectionName (v2.7.0 及更新版本) connectionStringName (v2.x) azureStorageConnectionStringName (v1.x) |
AzureWebJobsStorage | 應用程式設定或設定集合的名稱,指定如何連線到基礎 Azure 記憶體資源。 當您提供單一應用程式設定時,它應該是 Azure 儲存體連接字串。 |
| trackingStoreConnectionName (v2.7.0 及更新版本) trackingStoreConnectionStringName |
應用程式設定或設定集合的名稱,可指定如何連線到「歷程記錄」和「執行個體」資料表,這些資料表會儲存協調流程執行個體的相關執行歷程記錄和中繼資料。 當您提供單一應用程式設定時,它應該是 Azure 儲存體連接字串。 如果您未指定一個設定,則會使用 connectionStringName 值連線 (v2.x) 或 azureStorageConnectionStringName 值連線 (v1.x)。 |
|
| trackingStoreNamePrefix | 指定 trackingStoreConnectionStringName 時,用於歷程記錄和執行個體資料表的前置詞。 如果您未指定前置詞,則會使用 預設值 。DurableTask 如果未指定 trackingStoreConnectionStringName,則[歷程記錄]和[執行個體]資料表會使用 hubName 作為它們的前置詞,並忽略 trackingStoreNamePrefix 的設定。 |
|
| 追蹤輸入和輸出 | 假的 | 指出是否要追蹤函式呼叫的輸入和輸出的值。 追蹤函數執行事件時,預設行為是在函數呼叫的序列化輸入和輸出中包含位元組數。 此行為提供有關輸入和輸出的最少資訊,因此不會使日誌膨脹或無意中暴露敏感資訊。 當此屬性為 true時,會記錄函式輸入和輸出的全部內容。 |
| traceReplayEvents | 假的 | 此值可指出是否要將協調流程重新執行事件寫入到 Application Insights。 |
| logReplayEvents | 假的 | 表示是否要在應用程式記錄中記錄重播執行的數值。 |
| eventGridTopicEndpoint | Azure 事件方格自定義主題端點的 URL。 當您設定此屬性時,協調流程生命週期通知事件會發佈至此端點。 此屬性支援應用程式設定解析。 | |
| eventGridKeySettingName | 應用程式設定的名稱,其中包含用來在 URL 上向 EventGridTopicEndpoint 事件方格自訂主題進行驗證的金鑰。 |
|
| eventGridPublishRetryCount | 0 | 發佈至事件網格主題失敗時重試的次數。 |
| eventGridPublishRetryInterval | 00:05:00 | Azure 事件方格的發佈重試間隔,格式為「hh:mm:ss」。 |
| eventGridPublishEventTypes | 要發佈至事件方格的事件類型清單。 如果您未指定任何類型,則會發佈所有事件類型。 允許的值包括 Started、 、 CompletedFailed和 Terminated。 |
|
| extendedSessions已啟用 | 假的 | 此值可指定是否要快取工作階段協調器和實體函式工作階段。 |
| extendedSessionIdleTimeoutInSeconds | 30 | 閒置協調器或實體函式在卸載之前要保留在記憶體中的秒數。 只有在設定為 extendedSessionsEnabledtrue時,才會使用此設定。 |
| useAppLease | 是 | 此值可指出應用程式是否必須先取得應用程式層級 Blob 租用,才能處理工作中樞訊息。 如需詳細資訊,請參閱 Durable Functions 中的災害復原和地理分佈。 此設定從 v2.3.0 開始可用。 |
| useLegacyPartitionManagement | 假的 | 指定要使用的分割區管理演算法類型的值。 當此設定為 false時,會使用一種演算法來減少橫向擴展時重複函數執行的可能性。此設定從 v2.3.0 開始可用。
不建議將此值設定為true。 |
| useTablePartitionManagement | 在 v3.x 中:true 在 v2.x 中:false |
指定要使用的分割區管理演算法類型的值。 當此設定為 true時,會使用演算法,其設計目的是要降低 Azure 儲存體 v2 帳戶的成本。 此設定可從 WebJobs.Extensions.DurableTask v2.10.0 開始使用。 使用此設定搭配受控識別需要 WebJobs.Extensions.DurableTask v3.x 或更新版本,或 Worker.Extensions.DurableTask v1.2.x 或更新版本。 |
| useGracefulShutdown | 假的 | (預覽) 此值可指出是否要正常關機,以減少主機關機導致內含式函式執行失敗的機會。 |
| maxEntityOperationBatchSize |
使用量方案:50 專用或高級計劃:5,000 |
以 批次方式處理的實體作業數目上限。 如果此值為 1,則會停用批次處理,且個別函式呼叫會處理每個作業訊息。 此設定從 v2.6.1 開始可用。 |
| 將輸入儲存在編排歷史中 | 假的 | 指定如何儲存輸入的值。 當此設定為 true時,Durable Task Framework 會將活動輸入儲存在歷程記錄資料表中,而活動函式輸入會出現在協調流程歷程記錄查詢結果中。 |
| maxGrpcMessageSizeInBytes | 4,194,304 | 一個整數值,可設定泛型遠端程序呼叫 (gRPC) 用戶端可以接收之訊息大小上限 (以位元組為單位)。
DurableTaskClient 的實作會使用 gRPC 用戶端來管理協調流程執行個體。 此設定適用於 Durable Functions .NET 隔離工作者和 Java 應用程式。 |
| grpcHttpClientTimeout | 00:01:40 | Durable Functions 中 gRPC 用戶端所用 HTTP 用戶端的逾時值,格式為「hh:mm:ss」。 該用戶端目前支援用於 .NET 隔離式背景工作角色應用程式 (.NET 6 及更新版本) 和 Java 應用程式。 |
| 隊列客戶端消息編碼 | UTF8 | Azure 佇列儲存體訊息的編碼策略。 有效的策略是 Unicode 轉換格式 – 8 位元 (UTF8) 和 Base64。 當您使用 Microsoft.Azure.WebJobs.Extensions.DurableTask 3.4.0 或更新版本,或 Microsoft.Azure.Functions.Worker.Extensions.DurableTask 1.7.0 或更新版本時,會套用此設定。 |
其中許多設定都是為了優化效能。 如需詳細資訊,請參閱 效能和規模。