public static void Main(string[] args) { var host = new WebHostBuilder() .ConfigureAppConfiguration((hostingContext, configContext) => { var en = hostingContext.HostingEnvironment; configContext.AddJsonFile($"appsettings.{en.EnvironmentName}.json"); configContext.AddCommandLine(args) .AddEnvironmentVariables() .SetBasePath(Directory.GetCurrentDirectory()).Build(); }).ConfigureServices((context, configureServices) => { configureServices.AddKafka(KafkaBuilder => { KafkaBuilder.AddConfiguration(context.Configuration.GetSection("KafkaService")); }); configureServices.AddZookeeper(zooBuilder => { zooBuilder.AddConfiguration(context.Configuration.GetSection("zookeeperService")); }); }) .ConfigureLogging((hostingContext, logging) => { logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")) .AddConsole() .AddCustomizationLogger(); }).UseKestrel(KestrelServerOption => { KestrelServerOption.ListenAnyIP(801); }) .UseStartup <Startup>().Build(); host.Run(); }
public static void Main(string[] args) { var host = new HostBuilder() .UseEnvironment(EnvironmentName.Development) .ConfigureAppConfiguration((hostContext, configApp) => { configApp.SetBasePath(Directory.GetCurrentDirectory()); configApp.AddJsonFile( $"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true); configApp.AddEnvironmentVariables("PREFIX_"); configApp.AddCommandLine(args); var rootConfiguration = configApp.Build(); QuartzOpt = new QuartzOption(); rootConfiguration.GetSection("Quartz").Bind(QuartzOpt); }).ConfigureLogging((hostContext, configBuild) => { configBuild.AddConfiguration(hostContext.Configuration.GetSection("Logging")); configBuild.AddConsole(); configBuild.AddCustomizationLogger(); }) .ConfigureServices((hostContext, service) => { service.AddKafka(KafkaBuilder => { KafkaBuilder.AddConfiguration(hostContext.Configuration.GetSection("KafkaService")); }); service.AddZookeeper(zookeeperBuilder => { zookeeperBuilder.AddConfiguration(hostContext.Configuration.GetSection("zookeeperService")); }); service.AddDbContext <QuartzDbContext>(option => option.UseMySQL(hostContext.Configuration.GetConnectionString("QuartzDatabase")), ServiceLifetime.Transient, ServiceLifetime.Transient); }) .Build(); Host = host; ILoggerFactory loggerFact = host.Services.GetService <ILoggerFactory>(); LogProvider.SetCurrentLogProvider(new ConsoleLogProvider(loggerFact)); var ischema = RunProgramRunExample(loggerFact); host.WaitForShutdown(); ischema.Shutdown(true); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSingleton <IKafkaService, KafkaService>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddAuthorization(); services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = "http://localhost:64433"; options.RequireHttpsMetadata = false; options.ApiName = "api1"; }); services.AddKafka(KafkaBuilder => { var kafkaConfig = Configuration.GetSection("KafkaService"); KafkaBuilder.AddConfiguration(kafkaConfig); }); //services.AddSingleton<IOrderService, OrderService>(); // Add Steeltoe Discovery Client service services.AddDiscoveryClient(Configuration); // Add Steeltoe handler to container services.AddTransient <DiscoveryHttpMessageHandler>(); // Configure a HttpClient services.AddHttpClient <OrderService>(c => { c.BaseAddress = new Uri("http://orderservice"); }) .AddHttpMessageHandler <DiscoveryHttpMessageHandler>() .AddTypedClient <IOrderService, OrderService>(); var log = LoggerFac.CreateLogger <Startup>(); log.LogDebug("服务配置完成"); }
public static void Main(string[] args) { //这里获取程序及和工作线程配置信息 Dictionary <string, Assembly> assmblyColl = new Dictionary <string, Assembly>(); var host = new HostBuilder() .UseEnvironment(EnvironmentName.Development) .ConfigureAppConfiguration((hostContext, configApp) => { //这里netcore支持多数据源,所以可以扩展到数据库或者redis,集中进行配置。 // configApp.SetBasePath(Directory.GetCurrentDirectory()); configApp.AddJsonFile( $"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true); configApp.AddEnvironmentVariables("PREFIX_"); configApp.AddCommandLine(args); }).ConfigureLogging((hostContext, configBuild) => { configBuild.AddConfiguration(hostContext.Configuration.GetSection("Logging")); configBuild.AddConsole(); configBuild.AddCustomizationLogger(); }) .ConfigureServices((hostContext, service) => { service.Configure <HostOptions>(option => { option.ShutdownTimeout = System.TimeSpan.FromSeconds(10); }); service.AddKafka(KafkaBuilder => { KafkaBuilder.AddConfiguration(hostContext.Configuration.GetSection("KafkaService")); }); service.AddElasticsearchClient(config => { config.AddConfiguration(hostContext.Configuration.GetSection("ElasticsearchService")); }); service.AddDbContext <ConsoleDbContext>(option => option.UseMySQL(hostContext.Configuration.GetConnectionString("ConsoleDatabase")), ServiceLifetime.Transient, ServiceLifetime.Transient); ///TODO 待实现从数据库中pull数据,再将任务添加进DI service.AddSingleton <IConsole, KafkaToElasticsearch>(); }) .Build(); CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token; var task = Task.Run(async() => { IConsole console = host.Services.GetService <IConsole>(); await console.AsyncExcute(source.Token); }, source.Token); Dictionary <string, Task> dictTask = new Dictionary <string, Task>(); dictTask.Add("kafkatoelasticsearch", task); int recordRunCount = 0; var fact = host.Services.GetService <ILoggerFactory>(); var log = fact.CreateLogger <Program>(); var disp = Task.Run(() => { while (true) { if (!token.IsCancellationRequested) { ++recordRunCount; foreach (KeyValuePair <string, Task> item in dictTask) { if (item.Value.IsCanceled || item.Value.IsCompleted || item.Value.IsCompletedSuccessfully || item.Value.IsFaulted) { log.LogWarning("console任务:{0},参数:{1},执行异常,task状态:{2}", item.Key, "", item.Value.Status); if (item.Value.Exception != null) { log.LogError(item.Value.Exception, "task:{0},参数:{1},执行错误.", item.Key, ""); //TODO 根据参数更新数据库状态,以便被监控到。 } //更新数据库状态。 } } } System.Threading.Thread.Sleep(2000); log.LogInformation("循环:{0}次,接下来等待2秒。", recordRunCount); } }, source.Token); IApplicationLifetime appLiftTime = host.Services.GetService <IApplicationLifetime>(); appLiftTime.ApplicationStopping.Register(() => { log.LogInformation("程序停止中。"); source.Cancel(); log.LogInformation("程序停止完成。"); }); host.RunAsync().GetAwaiter().GetResult(); }