C# Azure持久功能:链接多个功能时,新实例在任何消息完成处理之前启动
我有一个带有QueueTrigger的Azure持久函数。在内部,我有一些Azure函数,这些函数随子编排一起调用。这是密码C# Azure持久功能:链接多个功能时,新实例在任何消息完成处理之前启动,c#,azure,azure-durable-functions,C#,Azure,Azure Durable Functions,我有一个带有QueueTrigger的Azure持久函数。在内部,我有一些Azure函数,这些函数随子编排一起调用。这是密码 var processKatartItem = context.GetInput<KatartItem>(); if (!processKatartItem.ProcessLeadTime && !processKatartItem.ProcessPrice && !processKatartItem.ProcessStoc
var processKatartItem = context.GetInput<KatartItem>();
if (!processKatartItem.ProcessLeadTime && !processKatartItem.ProcessPrice && !processKatartItem.ProcessStock)
{
await context.CallActivityWithRetryAsync("LLGFeedPreProductMessageProcessor", new RetryOptions(TimeSpan.FromSeconds(1), 5), processKatartItem);
}
var tasks = new Task[processKatartItem.vardatas.Count];
for (var i = 0; i < processKatartItem.vardatas.Count; i++)
{
tasks[i] = context.CallSubOrchestratorWithRetryAsync("LLGFeedProductOrchestrator", new RetryOptions(TimeSpan.FromSeconds(1), 5), new ProductProcessingModel
{
ProcessKatartItem = processKatartItem,
ProcessVardata = processKatartItem.vardatas[i]
});
}
await Task.WhenAll(tasks);
await context.CallActivityWithRetryAsync("LLGFeedFinalizeMessage", new RetryOptions(TimeSpan.FromSeconds(1), 5), processKatartItem);
这有什么原因吗?我认为无服务器持久功能的强大之处在于,您可以同时执行orchestrator。@MarieHoeger这是真的,我想确保持久功能不会破坏我们的网站。最后一个函数调用将调用我们网站上的Web Api端点。尽管我限制了持久函数,使其只能同时运行2个编排器和10个活动,但看起来最终会执行大量webapi调用(每次大约10个)。你是否尝试过调整你的应用程序以降低创建编排的速率?@KatyShimizu我已共享了我的主机。我只是在这里抛出一些东西(还没有使用耐久性测试此应用程序设置的行为),但这可能相关吗?这有什么原因吗?我认为无服务器持久功能的强大之处在于,您可以同时执行orchestrator。@MarieHoeger这是真的,我想确保持久功能不会破坏我们的网站。最后一个函数调用将调用我们网站上的Web Api端点。尽管我限制了持久函数,使其只能同时运行2个编排器和10个活动,但看起来最终会执行大量webapi调用(每次大约10个)。你是否尝试过调整你的应用程序以降低创建编排的速率?@KatyShimizu我已共享了我的主机。我只是在这里抛出一些东西(还没有使用耐久性测试此应用程序设置的行为),但这可能相关吗?
var processModel = context.GetInput<ProductProcessingModel>();
await context.CallActivityWithRetryAsync("LLGFeedProductSpecificationProcessor", new RetryOptions(TimeSpan.FromSeconds(1), 5), processModel);
await context.CallActivityWithRetryAsync("LLGFeedProductMessageProcessor", new RetryOptions(TimeSpan.FromSeconds(1), 5), processModel);
await context.CallActivityWithRetryAsync("LLGFeedProductMappingProcessor", new RetryOptions(TimeSpan.FromSeconds(1), 5), processModel);
await context.CallActivityWithRetryAsync("LLGFeedProductPriceProcessor", new RetryOptions(TimeSpan.FromSeconds(1), 5), processModel);
{
"version": "2.0",
"extensions": {
"durableTask": {
"HubName": "LLGFeedTaskHub",
"ControlQueueBatchSize": 8,
"PartitionCount": 2,
"MaxConcurrentActivityFunctions": 10,
"MaxConcurrentOrchestratorFunctions": 2,
"AzureStorageConnectionStringName": "AzureWebJobsStorage"
},
"queues": {
"batchSize": 10,
"newBatchThreshold": 5
}
},
"functionTimeout": "00:10:00"
}