我复制了以下架构。 我在cosmos db中插入gps位置(文档db),并在javascript客户端(地图google)中将图钉移动。 所有步骤均有效:插入文档数据库,触发azure函数和将客户端和文档数据库链接到azure cosmos数据库中的信号器。
在Cosmos中上传文档数据库的代码:
Microsoft.Azure.Documents.Document doc = client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, collectionName), estimatedPathDocument).Result.Resource;
ret[0] = doc.Id;
天蓝色功能
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));
解决方案可以是将队列中的文档列出,然后在彼此之间延迟约十秒钟后,依次将它们加载到蔚蓝的宇宙中?