public SnowflakeIdGenerationService( IOptions <NetworkOptions> networkOptions, ISchubertEnvironment schubertEnvironment, ILoggerFactory loggerFactory) { Guard.ArgumentNotNull(networkOptions, nameof(networkOptions)); Guard.ArgumentNotNull(schubertEnvironment, nameof(schubertEnvironment)); var logger = loggerFactory?.CreateLogger <SnowflakeIdGenerationService>() ?? (ILogger)NullLogger.Instance; var lanOptions = networkOptions.Value.Lans.FirstOrDefault(x => x.DataCenterId == networkOptions.Value.DataCenterId); if ((networkOptions.Value.DataCenterId <= 0 || lanOptions == null) && !schubertEnvironment.IsDevelopmentEnvironment) { throw new InvalidOperationException($"未能从 Schubert:Network 中查找到合法的 DataCenterId," + $"{nameof(NetworkOptions)}.{nameof(NetworkOptions.DataCenterId)} 必须使用 {nameof(NetworkOptions)}.{nameof(NetworkOptions.Lans)} 中配置过的数据中心 id。"); } var serverId = lanOptions?.GetServerId(); var dataCenterId = networkOptions.Value.DataCenterId; if (!serverId.HasValue) { if (!schubertEnvironment.IsDevelopmentEnvironment) { throw new SchubertException($"Snowflake 唯一 Id 生成配置错误,必须保证 {nameof(NetworkOptions)} 至少配置了一个{nameof(NetworkOptions.Lans)},且与本机 Id 地址匹配。"); } else { logger.WriteWarning($"无法获取当应用所在的数据中心和 ip 地址,Snowflake id 生成算法将使用省缺配置(datacenter:1,worker: 1)。"); serverId = 1; dataCenterId = 1; } } _worker = new SnowflakeWorker(serverId.Value - 1, dataCenterId - 1); }
///// <summary> ///// 获取应用程序当前的运行时 Framework (暂时只支持判断 Microsoft 平台,Mono等平台可能显示为 Unknown)。 ///// </summary> //public RuntimeFramework Framework //{ // get // { // if (this.FrameworkName == null) // { // return RuntimeFramework.Unknown; // } // switch (this.FrameworkName.Identifier) // { // case "DNXCore": // return RuntimeFramework.DNXCore; // case "DNX": // return RuntimeFramework.DNX; // case ".NetFramework": // return RuntimeFramework.Net; // default: // return RuntimeFramework.Unknown; // } // } //} internal void LoadEnvironment(IServiceProvider serviceProvider) { Guard.ArgumentNotNull(serviceProvider, nameof(serviceProvider)); ISchubertEnvironment hosting = serviceProvider.GetService <ISchubertEnvironment>(); _environment = hosting; this.FrameworkName = hosting.RuntimeFramework; }
public AppDataFolderRoot(IPathProvider pathProvider, ISchubertEnvironment environment, IOptions <SchubertOptions> options) { Guard.ArgumentNotNull(pathProvider, nameof(pathProvider)); Guard.ArgumentNotNull(environment, nameof(environment)); Guard.ArgumentNotNull(options, nameof(options)); _environment = environment; _pathProvider = pathProvider; _appName = options.Value?.AppSystemName ?? "Unnamed App"; }
private async Task LoadRemoteConfigurationAsync(ZookeeperClient client, bool firstLoad = false) { _firstLoaded = false; _logger = (_logger ?? SchubertEngine.Current.GetService <ILoggerFactory>()?.CreateLogger(this.GetType().Name)) ?? NullLogger.Instance; _environment = (_environment ?? SchubertEngine.Current.GetRequiredService <ISchubertEnvironment>()); string path = $"{this.RootNodePath.TrimEnd('/')}/{_nodeName}"; if (await CheckNodeExistedAsync(client, path, firstLoad)) { await LoadConfigurationDataAsync(client, firstLoad, path); } }
private static void LogEngineStarted(IServiceProvider provider) { ILoggerFactory loggerFactory = provider.GetService <ILoggerFactory>(); ILogger logger = loggerFactory?.CreateLogger("Schubert") ?? NullLogger.Instance; ISchubertEnvironment schubertEnvironment = provider.GetRequiredService <ISchubertEnvironment>(); StringBuilder builder = new StringBuilder(); builder.AppendLine("Schubert engine was started."); var properties = schubertEnvironment.ToDictionary(); foreach (var kv in properties) { builder.AppendLine($"{kv.Key}: {kv.Value}"); } logger.WriteInformation(builder.ToString()); }
public DefaultPathProvider(ISchubertEnvironment applicationEnvironment) { Guard.ArgumentNotNull(applicationEnvironment, nameof(applicationEnvironment)); _applicationEnvironment = applicationEnvironment; }