private static void ConfigureHangfire(IGlobalConfiguration config, IContainer container)
 {
     config.UseAutofacActivator(container);
 }
Example #2
0
 private static void ConfigureHangfire(IGlobalConfiguration config, IContainer container)
 {
     config.UseAutofacActivator(container);
 }
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            SetConfiguration();
            ServiceCollections = new ServiceCollection();

            ConfigureServices(ServiceCollections);
            ILogger <Program> logger = ServiceProvider.GetService <ILogger <Program> >();

            logger.LogInformation("启动服务");
            try
            {
                //var doPublishEventTestService = ServiceProvider.GetService<DoPublishEventTestService>();
                //await doPublishEventTestService.OnStart();
                //Console.WriteLine("123");

                //使用Autofac必须再全局配置GlobalConfiguration.Configuration.UseRedisStorage后面启用,
                //且创建BackgroundJobServer必须放在UseAutofacActivator方法后面,不然无效。
                // 部分问题:BackgroundJobServer以全局实例注入后,无法获取到
                _redisStorage.UseAutofacActivator(ApplicationContainer);
                //ServiceCollections.AddSingleton(redisStorage);

                foreach (var backgroundJobServerOption in JobServerOptionsList)
                {
                    //如要按队列来分配后台作业服务器,则可创建多个后台作业服务器实例
                    var backgroundJobServer = new BackgroundJobServer(backgroundJobServerOption, _redisStorage.Entry);
                    _backgroundJobServerList.Add(backgroundJobServer);
                }


                //_backgroundJobServer ??= new BackgroundJobServer(JobServerOptions);
                // Autofac接管前可用
                //ServiceCollections.AddSingleton(_backgroundJobServer);
                // Autofac接管后需要用Aufofac的注入
                //AppContainerBuilder.RegisterInstance(_backgroundJobServer).SingleInstance();
                //AppContainerBuilder.RegisterInstance<BackgroundJobServer>(_backgroundJobServer).SingleInstance();

                //BackgroundJob.Enqueue<TestJob>(x => x.CallUrl("https://www.qq.com", "ConsoleServerJob"));
                //BackgroundJob.Enqueue<GetNewsJob>(x => x.GetNewsByUrl("https://www.qq.com", "获取腾讯新闻"));

                var backgroundJobServer2 = ServiceProvider.GetService <BackgroundJobServer>();
                var backgroundJobClient  = ServiceProvider.GetService <IBackgroundJobClient>();
                //注意,执行job方法里 的PerformContext参数必须填null
                backgroundJobClient.Enqueue <GetNewsJob>(t =>
                                                         t.GetBaiduNews("获取百度新闻1111123", null));
            }
            catch (Exception ex)
            {
                Console.WriteLine("启动出错");
                logger.LogError("启动报错:" + ex);

                /*
                 * if (_backgroundJobServer != null)
                 * {
                 *  await _backgroundJobServer.WaitForShutdownAsync(cancellationToken);
                 *  _backgroundJobServer.SendStop();
                 *  _backgroundJobServer.Dispose();
                 * }
                 */
                if (_backgroundJobServerList.Count > 1)
                {
                    foreach (var backgroundJobServer in _backgroundJobServerList)
                    {
                        await backgroundJobServer.WaitForShutdownAsync(cancellationToken);

                        backgroundJobServer.SendStop();
                        backgroundJobServer.Dispose();
                    }
                }
                Console.ReadKey();
            }
            //return Task.CompletedTask;
        }