Я повторил архитектуру ниже.
Я вставляю gps позиции (документ db) в космос db и в клиенте javascript (карты google) штифт перемещается.
Все действия выполняются: вставьте базу данных документа, запустите функцию Azure и сигнализатор, которые связывают клиент и базу данных в базе данных Azure Cosmos DB.
![architecture](https://anthonychu.ca/post-assets/2018-09-24/architecture-overview.png)
Код для загрузки документа БД в Космос:
Microsoft.Azure.Documents.Document doc = client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, collectionName), estimatedPathDocument).Result.Resource;
ret[0] = doc.Id;
Функция Azure:
public static async Task Run(IReadOnlyList<Document> input, IAsyncCollector<SignalRMessage> signalRMessages, ILogger log)
{
if (input != null && input.Count > 0)
{
var val = input.Select((d) => new
{
genKey = d.GetPropertyValue<string>("genKey"),
dataType = d.GetPropertyValue<string>("dataType")
});
await signalRMessages.AddAsync(new SignalRMessage
{
UserId = val.First().genKey,
Target = "tripUpdated",
Arguments = new[] { input }
});
}
}
Когда я вставляю только одну позицию, функция в лазури записывает событие и выстреливает, перемещая булавку.
Проблема в том, что я последовательно вставляю серию позиций практически мгновенно, и это не вызывает функцию для документа, следующего за первым.
Только если я вставлю задержку, только некоторые документы сработают:
Microsoft.Azure.Documents.Document doc = client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, collectionName), estimatedPathDocument).Result.Resource;
Thread.Sleep(3000);
ret[0] = doc.Id;
Я не знаю, правильно ли я загружаю документы, но даже управляя ими асинхронным способом (см. Ниже), почти кажется, что триггер срабатывает только тогда, когда документ в cosmos db «действительно / физически» создан .
Task.Run(async () => await AzureCosmosDB_class.MyDocumentAzureCosmosDB.CreateRealCoordDocumentIfNotExists_v1("axylog-cdb-01", "axylog-collection-01", realCoord, uri, key));
Решение может заключаться в том, чтобы перечислять документы в очереди и загружать их в лазурный космос последовательно после задержки, равной примерно десяти секундам друг от друга?