这个YouTube 视频 @27:20讨论了如何在缓存中填充路由信息,以避免冷启动期间的延迟。您可以尝试获取您知道不存在的文档,也可以使用CosmosClient.CreateAndInitializeAsync()。
我已经设置了这个代码:
private async Task<Container> CreateContainerAsync(string endpoint, string authKey)
{
var cosmosClientBuilder = new CosmosClientBuilder(
accountEndpoint: endpoint,
authKeyOrResourceToken: authKey)
.WithConnectionModeDirect(portReuseMode: PortReuseMode.PrivatePortPool, idleTcpConnectionTimeout: TimeSpan.FromHours(1))
.WithApplicationName(UserAgentSuffix)
.WithConsistencyLevel(ConsistencyLevel.Session)
.WithApplicationRegion(Regions.AustraliaEast)
.WithRequestTimeout(TimeSpan.FromSeconds(DatabaseRequestTimeoutInSeconds))
.WithThrottlingRetryOptions(TimeSpan.FromSeconds(DatabaseMaxRetryWaitTimeInSeconds), DatabaseMaxRetryAttemptsOnThrottledRequests);
var client = cosmosClientBuilder.Build();
var databaseResponse = await CreateDatabaseIfNotExistsAsync(client).ConfigureAwait(false);
var containerResponse = await CreateContainerIfNotExistsAsync(databaseResponse.Database).ConfigureAwait(false);
return containerResponse;
}是否有任何方法将CosmosClient.CreateAndInitializeAsync()与其结合,以填充缓存?
如果没有,是否可以这样做来填充缓存?
public class CosmosClientWrapper
{
public CosmosClientWrapper(IKeyVaultFacade keyVaultFacade)
{
var container = CreateContainerAsync(endpoint, authenticationKey).GetAwaiter().GetResult();
// Get a document that doesn't exist to populate the routing info:
container.ReadItemAsync<object>(Guid.NewGuid().ToString(), PartitionKey.None).GetAwaiter().GetResult();
}
}发布于 2022-11-17 15:46:18
CreateAndInitialize或BuildAndInitialize的目的是预先建立对所需容器执行数据平面操作所需的连接(参考https://learn.microsoft.com/azure/cosmos-db/nosql/sdk-connection-modes#routing)。
如果容器不存在,那么使用CreateAndInitialize或BuildAndInitialize是没有意义的,因为没有可以预先建立/预热的连接,因为没有要连接的目标后端端点。这就是为什么需要容器/数据库信息的原因,因为唯一的好处是将连接到支持该/那些容器/s的后端机器上。
发布于 2022-11-17 10:56:57
请参阅CosmosClientBuilder.BuildAndInitializeAsync,它创建了cosmos客户端并初始化了所提供的容器。我相信这就是你要找的。
https://stackoverflow.com/questions/74474090
复制相似问题