我正在阅读这篇关于Azure CosmosDB连接策略的文章。
它说如果你使用ConnectionMode = ConnectionMode.Direct
,那么你也需要设置ConnectionProtocol
。
这篇文章说ConnectionMode.Direct
使用TCP,所以我假设我应该将ConnectionProtocol
设置为Protocol.Tcp
由于Protocol
enum的默认值是Https
,如果不设置它会发生什么,它会默认为Https
吗?
如果它默认为Https
,这会导致任何问题吗?
下面是我的代码:
var connectionPolicy = new ConnectionPolicy
{
//ConnectionProtocol = Protocol.Tcp, // This is not set!
ConnectionMode = ConnectionMode.Direct,
RequestTimeout = TimeSpan.FromSeconds(10),
UserAgentSuffix = "ING",
RetryOptions = new RetryOptions
{
MaxRetryAttemptsOnThrottledRequests = 5,
MaxRetryWaitTimeInSeconds = 2
}
};
var client = new DocumentClient(new Uri(endpoint), authKey, connectionPolicy, ConsistencyLevel.Session);
Protocol
枚举供参考:
public enum Protocol
{
Https,
Tcp
}
我们已经开始得到ServiceUnavailableException
和SNAT端口耗尽错误,所以我想知道这是否与它有关。
对于V2 SDK,默认为Https
。您将以Direct/HTTPS
模式结束,而不是Direct/TCP
或Gateway
。
Direct/HTTPS
虽然有效并且可以工作,但不再是文档(https://docs.microsoft.com/azure/cosmos-db/sql/sql-sdk-connection-modes)上任何建议的一部分。如果您需要使用HTTPs,请使用Gateway
,如果您想使用Direct
,请使用Direct/TCP
。
V3 SDK删除了选择Direct/HTTPS
的可能性,它只是Direct
(TCP)或Gateway
(HTTP)。
关于SNAT,请参考https://docs.microsoft.com/azure/cosmos-db/sql/troubleshoot-service-unavailable
直接模式会在设计上使用更多的连接,请确保机器可以支持,并且您遵循单例模式以避免创建更多的连接,而不是重用它们。