我有一个ComsosDB,它将读取副本分发给多个区域。我在每个区域中都有多个Azure功能的实例,这些区域也有对CosmosDB的输入绑定,我想确保它们与Cosmos数据库的本地复制进行通信,而不是回到世界各地到写入位置。 我看到SDK允许设置PreferredLocations,输入绑定是否通过一些自动发现为我处理这个,或者这是我可以在我的连接字符串中设置的东西? https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmosdb.table.tableconnectionpolicy.preferredlocations?view=azure-dotnet#Microsoft_Azure_CosmosDB_Table_TableConnectionPolicy_PreferredLocations
对于类似于REST api https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-global-distribution-sql-api#rest的每个函数,我可以手动将AccountEndpoint输入到本地区域,但是我希望函数绑定能够自动处理,或者在发生故障时使用一些提示。
DocumentClient
实例的构造函数(这是你可以改变ConnectionPolicy
的地方)是函数集成中的not exposed。
在这种情况下,您可以在函数中创建自己的DocumentClient
实例,并在那里设置您的配置。作为性能建议,不要在DocumentClient
函数代码中创建Run
,而是将其创建为静态变量,以便在函数执行之间重用它而不是重新创建。
关于如何维护静态可重用DocumentClient
的示例
#r "Microsoft.Azure.Documents.Client"
using System.Net;
using Microsoft.Azure.Documents.Client;
static DocumentClient client = new DocumentClient(
new Uri("https://<your-account>.documents.azure.com:443/"),
"<your-key>",
new ConnectionPolicy(){
// TODO: set your preferences here
});
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
var document = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri("<your-db>","<your-collection>","<some-id>"));
return req.CreateResponse(HttpStatusCode.OK, document.Resource.Id);
}