如果在使用 ConnectionMode.Direct 时未设置 ConnectionPolicy.ConnectionProtocol 会发生什么情况?



我正在阅读这篇关于Azure CosmosDB连接策略的文章。

它说如果你使用ConnectionMode = ConnectionMode.Direct,那么你也需要设置ConnectionProtocol

这篇文章说ConnectionMode.Direct使用TCP,所以我假设我应该将ConnectionProtocol设置为Protocol.Tcp

由于Protocolenum的默认值是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/TCPGateway

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

直接模式会在设计上使用更多的连接,请确保机器可以支持,并且您遵循单例模式以避免创建更多的连接,而不是重用它们。

相关内容

  • 没有找到相关文章

最新更新