更改Feed不会触发Cosmos DB中的多个插入文档

时间:2019-01-24 17:24:45

标签: signalr azure-functions azure-cosmosdb signalr-hub serverless

我复制了以下架构。 我在cosmos db中插入gps位置(文档db),并在javascript客户端(地图google)中将图钉移动。 所有步骤均有效:插入文档数据库,触发azure函数和将客户端和文档数据库链接到azure cosmos数据库中的信号器。

architecture

在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));

解决方案可以是将队列中的文档列出,然后在彼此之间延迟约十秒钟后,依次将它们加载到蔚蓝的宇宙中?

0 个答案:

没有答案