У меня есть функция, которая запускается при вставке / обновлении CosmosDb, и я копирую каждый документ в большой двоичный объект. При отладке функция запускается снова и снова для одной и той же горстки документов.
Я пытался ограничить количество обрабатываемых документов, но это заставляет его обрабатывать только одни и те же N документов снова и снова. Я пытался поднять RU для коллекции триггеров (и коллекции аренды), но это не имело никакого эффекта.
[FunctionName("Function1")]
public async static Task Run([CosmosDBTrigger(
databaseName: "Events",
collectionName: "DomainEvents",
ConnectionStringSetting = "cosmosConnectionString",
CreateLeaseCollectionIfNotExists = true,
LeaseCollectionName = "DomainEventLeases")]IReadOnlyList<Document> input, ILogger log, ExecutionContext context)
{
if (input != null && input.Count > 0)
{
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
CloudStorageAccount cloudStorageAccount;
if (CloudStorageAccount.TryParse(config["StorageConnectionAppSetting"], out cloudStorageAccount))
{
var client = cloudStorageAccount.CreateCloudBlobClient();
var container = client.GetContainerReference("wormauditlog");
foreach(var thisDocument in input)
{
var blob = container.GetBlockBlobReference(thisDocument.Id);
try
{
await blob.UploadFromByteArrayAsync(thisDocument.ToByteArray(), 0, thisDocument.ToByteArray().Length);
}
catch(Exception e)
{
throw;
}
}
}
else
{
throw new FunctionInvocationException("Bad storage connection string.");
}
}
}