我有一个Azure函数(v2),可以访问Cosmos DB,但不是通过绑定(我们需要使用自定义序列化设置)。我遵循了这里的示例来设置一个对象,该对象应可用于活动函数的所有实例。我的有点不同,因为我们的自定义<code>CosmosDb
public static class AnalyzeActivityTrigger
{
private static readonly Lazy<Task<CosmosDb>> LazyCosmosDb = new Lazy<Task<CosmosDb>>(InitializeDocumentClient);
private static Task<CosmosDb> CosmosDb => LazyCosmosDb.Value;
private static Task<CosmosDb> InitializeDocumentClient()
{
return StorageFramework.CosmosDb.GetCosmosDb(DesignUtilities.Storage.CosmosDbContainerDefinitions, DesignUtilities.Storage.CosmosDbMigrations);
}
[FunctionName(nameof(AnalyzeActivityTrigger))]
public static async Task<Guid> Run(
[ActivityTrigger]DurableActivityContext context,
ILogger log)
{
var analyzeActivityRequestString = context.GetInput<string>();
var analyzeActivityRequest = StorageFramework.Storage.Deserialize<AnalyzeActivityRequest>(analyzeActivityRequestString);
var componentDesign = StorageFramework.Storage.Deserialize<ComponentDesign>(analyzeActivityRequest.ComponentDesignString);
var (analysisSet, _, _) = await AnalysisUtilities.AnalyzeComponentDesignAndUploadArtifacts(componentDesign,
LogVariables.Off, new AnalysisLog(), Stopwatch.StartNew(), analyzeActivityRequest.CommitName, await CosmosDb);
return analysisSet.AnalysisReport.Guid;
}
}
我们扇出,并行调用此活动函数。我们的文档相当大,因此更新它们很昂贵,这是此代码的一部分。
我有时会在容器时收到此错误。ReplaceItemAsync
称为:
响应状态码不表示成功:408子状态:0原因:(消息:请求超时。...
显然要做的事情似乎是增加超时,但这是否表明存在其他问题?增加超时似乎是在解决症状,而不是问题。我们有代码可以在这一切发生之前扩展我们的RU。我想知道这是否与Azure函数扇形展开有关,这会给它带来太多的负载。所以我也在调整主机。durableTask
的json设置,如maxConcurrentActivityFunctions
,和maxConcurrent OrchestratorFunctions
,但到目前为止无效。
我应该如何处理这个408错误?除了增加请求超时时间之外,我还可以考虑采取什么措施来缓解这种情况?
更新1:我将默认请求超时时间增加到5分钟,现在我得到了503个响应。
更新 2:指向发布到高级计划中的 Azure 函数的克隆似乎在经过多次测试后仍能正常工作。
更新3:我们对它的测试不够努力。该问题也出现在Premium计划中。GitHub问题即将发布。
更新4:我们似乎已经通过在连接到Cosmos时使用网关模式和增加RU来解决这个问题。
超时确实可以表明有关实例资源的问题。参考:https://docs.microsoft.com/azure/cosmos-db/troubleshoot-dot-net-sdk#request-timeouts
如果在函数上运行,请查看连接。还要验证实例中的 CPU 使用情况。如果 CPU 很高,则可能会影响请求延迟并最终导致超时。
对于函数,你当然可以使用DI来避免整个懒惰声明:https://github . com/Azure/Azure-cosmos-dot net-v3/tree/master/Microsoft。Azure.Cosmos.Samples/Usage/AzureFunctions
使用以下内容创建< code>Startup.cs文件:
using System;
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(YourNameSpace.Startup))]
namespace YourNameSpace
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton((s) => {
CosmosClient cosmosClient = new CosmosClient("connection string");
return cosmosClient;
});
}
}
}
然后你可以让你的函数不是静态的并注入它:
public class AnalyzeActivityTrigger
{
private readonly CosmosClient cosmosClient;
public AnalyzeActivityTrigger(CosmosClient cosmosClient)
{
this.cosmosClient = cosmosClient;
}
[FunctionName(nameof(AnalyzeActivityTrigger))]
public async Task<Guid> Run(
[ActivityTrigger]DurableActivityContext context,
ILogger log)
{
var analyzeActivityRequestString = context.GetInput<string>();
var analyzeActivityRequest = StorageFramework.Storage.Deserialize<AnalyzeActivityRequest>(analyzeActivityRequestString);
var componentDesign = StorageFramework.Storage.Deserialize<ComponentDesign>(analyzeActivityRequest.ComponentDesignString);
var (analysisSet, _, _) = await AnalysisUtilities.AnalyzeComponentDesignAndUploadArtifacts(componentDesign,
LogVariables.Off, new AnalysisLog(), Stopwatch.StartNew(), analyzeActivityRequest.CommitName, this.cosmosClient);
return analysisSet.AnalysisReport.Guid;
}
}
有人能告诉我如何从Java中的HTTP触发器Azure函数发送pdf响应吗。 一旦该功能被触发,我需要从Azure存储中读取pdf,并将pdf作为响应返回到浏览器。
我正在使用Azure函数V1 c#。我有一个时间触发的azure函数,它每秒都在检查我的数据库中的一些数据。如果找到了数据,我想对它执行一些操作。此操作可能需要30秒到5分钟的时间,具体取决于其上发生的操作。 > 当我的时间触发函数获取数据并开始对其执行操作时。在第一个操作完成之前,时间触发的函数不会再次执行。因此,即使时间触发函数被安排为每秒执行一次,如果上一次迭代中的操作花费了 30 秒,则在
我有一个时间触发的Azure功能
我在学习http://martinabbott.azurewebsites.net/2016/06/11/fun-with-azure-functions-and-the-emotion-api/ 我在集成选项卡中有名为“图片”的Blob触发器存储容器。myblob路径是“图片/{名称}”没有定义输入。输出是DocumentDB。我已经验证访问密钥是正确的。 我想知道错误的原因是什么?与 Azur
我目前正在Visual Studio中使用微软的Azure函数开发一个函数应用程序。我能够在azure上部署和发布功能,它似乎可以运行,但每当我试图在本地运行功能时,托管环境都无法找到任何“作业”。我在下面附上了一张图片。 必须指出的是,我在某个时候能够在本地部署,但我相信在一些更新之后,我无法运行我的功能 Azure函数和Web作业工具的当前版本:15.0.40424.0 当我创建新项目时,我尝
我在更新react native和react后出现此错误 我认为这是正确的语法,但我不知道为什么显示这个错误: SyntaxError:导出时出现意外标记= 。在模块上运行InthisContext(vm.js:53:16) _在对象上编译(module.js:387:25) 。模块_扩展。。js(module.js:422:10) 在模块中。在函数处加载(module.js:357:32) 。模