in edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Service/DependencyManager.cs [181:261]
void RegisterRoutingModule(
ContainerBuilder builder,
StoreAndForward storeAndForward,
ExperimentalFeatures experimentalFeatures,
bool nestedEdgeEnabled,
bool scopeAuthenticationOnly,
bool trackDeviceState)
{
var routes = this.configuration.GetSection("routes").Get<Dictionary<string, string>>();
int connectionPoolSize = this.configuration.GetValue<int>("IotHubConnectionPoolSize");
string configSource = this.configuration.GetValue<string>("configSource");
bool useTwinConfig = !string.IsNullOrWhiteSpace(configSource) && configSource.Equals("twin", StringComparison.OrdinalIgnoreCase);
Option<UpstreamProtocol> upstreamProtocolOption = GetUpstreamProtocol(this.configuration);
int connectivityCheckFrequencySecs = this.configuration.GetValue("ConnectivityCheckFrequencySecs", 300);
TimeSpan connectivityCheckFrequency = connectivityCheckFrequencySecs < 0 ? TimeSpan.MaxValue : TimeSpan.FromSeconds(connectivityCheckFrequencySecs);
// n Clients + 1 Edgehub
int maxConnectedClients = this.configuration.GetValue("MaxConnectedClients", 100) + 1;
int messageAckTimeoutSecs = this.configuration.GetValue("MessageAckTimeoutSecs", 30);
TimeSpan messageAckTimeout = TimeSpan.FromSeconds(messageAckTimeoutSecs);
int cloudConnectionIdleTimeoutSecs = this.configuration.GetValue("CloudConnectionIdleTimeoutSecs", 3600);
TimeSpan cloudConnectionIdleTimeout = TimeSpan.FromSeconds(cloudConnectionIdleTimeoutSecs);
bool closeCloudConnectionOnIdleTimeout = this.configuration.GetValue("CloseCloudConnectionOnIdleTimeout", true);
int cloudOperationTimeoutSecs = this.configuration.GetValue("CloudOperationTimeoutSecs", 20);
int cloudConnectionHangingTimeoutSecs = this.configuration.GetValue("CloudConnectionHangingTimeoutSecs", 50);
bool useServerHeartbeat = this.configuration.GetValue("UseServerHeartbeat", true);
TimeSpan cloudOperationTimeout = TimeSpan.FromSeconds(cloudOperationTimeoutSecs);
TimeSpan cloudConnectionHangingTimeout = TimeSpan.FromSeconds(cloudConnectionHangingTimeoutSecs);
Option<TimeSpan> minTwinSyncPeriod = this.GetConfigurationValueIfExists("MinTwinSyncPeriodSecs")
.Map(s => TimeSpan.FromSeconds(s));
Option<TimeSpan> reportedPropertiesSyncFrequency = this.GetConfigurationValueIfExists("ReportedPropertiesSyncFrequencySecs")
.Map(s => TimeSpan.FromSeconds(s));
bool useV1TwinManager = this.GetConfigurationValueIfExists<string>("TwinManagerVersion")
.Map(v => v.Equals("v1", StringComparison.OrdinalIgnoreCase))
.GetOrElse(false);
int maxUpstreamBatchSize = this.configuration.GetValue("MaxUpstreamBatchSize", 10);
int upstreamFanOutFactor = this.configuration.GetValue("UpstreamFanOutFactor", 10);
bool encryptTwinStore = this.configuration.GetValue("EncryptTwinStore", true);
int configUpdateFrequencySecs = this.configuration.GetValue("ConfigRefreshFrequencySecs", 3600);
TimeSpan configUpdateFrequency = TimeSpan.FromSeconds(configUpdateFrequencySecs);
bool checkEntireQueueOnCleanup = this.configuration.GetValue("CheckEntireQueueOnCleanup", false);
int messageCleanupIntervalSecs = this.configuration.GetValue("MessageCleanupIntervalSecs", 1800);
bool closeCloudConnectionOnDeviceDisconnect = this.configuration.GetValue("CloseCloudConnectionOnDeviceDisconnect", true);
builder.RegisterModule(
new RoutingModule(
this.iotHubHostname,
this.gatewayHostname,
this.edgeDeviceId,
this.edgeModuleId,
this.connectionString,
routes,
storeAndForward.IsEnabled,
storeAndForward.Config,
connectionPoolSize,
useTwinConfig,
this.versionInfo,
upstreamProtocolOption,
connectivityCheckFrequency,
maxConnectedClients,
messageAckTimeout,
cloudConnectionIdleTimeout,
closeCloudConnectionOnIdleTimeout,
cloudOperationTimeout,
cloudConnectionHangingTimeout,
useServerHeartbeat,
minTwinSyncPeriod,
reportedPropertiesSyncFrequency,
useV1TwinManager,
maxUpstreamBatchSize,
upstreamFanOutFactor,
encryptTwinStore,
configUpdateFrequency,
checkEntireQueueOnCleanup,
messageCleanupIntervalSecs,
experimentalFeatures,
closeCloudConnectionOnDeviceDisconnect,
nestedEdgeEnabled,
scopeAuthenticationOnly: scopeAuthenticationOnly,
trackDeviceState: trackDeviceState,
this.manifestTrustBundle));
}