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();
        }
Пример #2
0
        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);
        }
Пример #3
0
        // 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("服务配置完成");
        }
Пример #4
0
        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();
        }