/// <summary> /// 发布通知 /// </summary> /// <param name="provider">通知发布者</param> /// <param name="notificationInfo">通知信息</param> /// <param name="subscriptionUserIdentifiers">订阅用户列表</param> /// <returns></returns> protected async Task PublishAsync(INotificationPublishProvider provider, NotificationInfo notificationInfo, IEnumerable <UserIdentifier> subscriptionUserIdentifiers) { try { Logger.LogDebug($"Sending notification with provider {provider.Name}"); var notifacationDataMapping = Options.NotificationDataMappings .GetMapItemOrNull(provider.Name, notificationInfo.CateGory); if (notifacationDataMapping != null) { notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data); } // 发布 await provider.PublishAsync(notificationInfo, subscriptionUserIdentifiers); Logger.LogDebug($"Send notification {notificationInfo.Name} with provider {provider.Name} was successful"); } catch (Exception ex) { Logger.LogWarning($"Send notification error with provider {provider.Name}"); Logger.LogWarning($"Error message:{ex.Message}"); Logger.LogTrace(ex, $"Send notification error with provider { provider.Name}"); Logger.LogDebug($"Send notification error, notification {notificationInfo.Name} entry queue"); // 发送失败的消息进入后台队列 await BackgroundJobManager.EnqueueAsync( new NotificationPublishJobArgs(notificationInfo.GetId(), provider.GetType().AssemblyQualifiedName, subscriptionUserIdentifiers.ToList(), notificationInfo.TenantId)); } }
public SamplesController(ILogger <SamplesController> logger, IConfiguration configuration, BackgroundJobManager backgroundJobManager, IMetrics metrics) { _logger = logger; _configuration = configuration; _backgroundJobManager = backgroundJobManager; _metrics = metrics; }
public void BackgroundJobManagerTest() { IIocManager iocResolver = new IocManager(); // 注册服务 iocResolver.Register <SimpleSendEmailJob>(DependencyLifeStyle.Transient); IBackgroundJobStore jobStore = new InMemoryBackgroundJobStore(); IBackgroundJobManager _backgroundJobManager = new BackgroundJobManager(iocResolver, jobStore, new Enterprises.Framework.Threading.AbpTimer()); _backgroundJobManager.Enqueue <SimpleSendEmailJob, SimpleSendEmailJobArgs>( new SimpleSendEmailJobArgs { Subject = "邮件主题", Body = "测试邮件", SenderUserId = 1000, TargetUserId = 2000 }); _backgroundJobManager.Enqueue <SimpleSendEmailJob, SimpleSendEmailJobArgs>( new SimpleSendEmailJobArgs { Subject = "邮件主题2", Body = "测试邮件2", SenderUserId = 1000, TargetUserId = 2000 }, BackgroundJobPriority.Normal, TimeSpan.FromSeconds(10)); _backgroundJobManager.Start(); Console.WriteLine($"datetime={DateTime.Now} end send Email "); }
public async Task <SiteViewModelWithChilds> SaveSite(SiteViewModelWithChilds model) { var res = await _configurationService.SaveSite(model); await BackgroundJobManager.UpdateWorker(res.Id, _configurationService); return(res); }
protected virtual void Dispose(bool isDisposing) { if (_backgroundJobManager != null) { _backgroundJobManager.Dispose(); _backgroundJobManager = null; } }
public SamplesController(ILogger <SamplesController> logger, IConfiguration configuration, BackgroundJobManager backgroundJobManager, AppSettings appSettings, IDateTimeProvider dateTimeProvider) { _logger = logger; _configuration = configuration; _backgroundJobManager = backgroundJobManager; _appSettings = appSettings; _dateTimeProvider = dateTimeProvider; }
public SamplesController(ILogger <SamplesController> logger, IConfiguration configuration, BackgroundJobManager backgroundJobManager, AppSettings appSettings, IDateTimeProvider dateTimeProvider, IEnumerable <IService> services) { _logger = logger; _configuration = configuration; _backgroundJobManager = backgroundJobManager; _appSettings = appSettings; _dateTimeProvider = dateTimeProvider; _services = services; }
public void Start(StartContext context) { var adapter = new DependencyInjectionAdapter(context.ServiceProvider); _backgroundJobManager = new BackgroundJobManager(adapter); _backgroundJobManager.ExecuteSequentially = true; _backgroundJobManager.JobFailed += OnBackgroundJobFailed; _backgroundJobManager.StartInterval = TimeSpan.FromSeconds(Debugger.IsAttached ? 0 : 10); _backgroundJobManager.ExecuteInterval = TimeSpan.FromSeconds(Debugger.IsAttached ? 0 : 30); _backgroundJobManager.ScopeClosing += OnBackgroundJobScopeClosing; _backgroundJobManager.Start(); }
private void BuildServices() { _appManager = new ApplicationServiceManager(CompositionRoot.Container) { Settings = new ApplicationServiceManagerSettingsWithDefaultOn() }; _appManager.ServiceFailed += OnServiceFailed; _backgroundJobManager = new BackgroundJobManager(CompositionRoot.Container); _backgroundJobManager.JobFailed += OnJobFailed; _backgroundJobManager.StartInterval = TimeSpan.FromSeconds(Debugger.IsAttached ? 0 : 10); _backgroundJobManager.ExecuteInterval = TimeSpan.FromMinutes(5); _backgroundJobManager.ScopeClosing += OnScopeClosing; }
protected override async Task SendEmailAsync() { var publicationState = EventData.Entity.IsPublished ? "Published" : "Unpublished"; var time = EventData.Entity.LastModificationTime.Humanize(); var message = $"your product named {EventData.Entity.Title} was {publicationState} {time}"; if (ToUser != null) { await BackgroundJobManager.EnqueueAsync(new EmailSendingArgs() { EmailAddress = ToUser.Email, Subject = $"Product {publicationState}", Body = message }); } }
public void execute_found_job() { var sl = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); var job = Substitute.For <IBackgroundJob>(); sl.CreateScope().Returns(scope); scope.Resolve(job.GetType()).Returns(job); scope.ResolveAll <IBackgroundJob>().Returns(new[] { job }); var sut = new BackgroundJobManager(sl); sut.StartInterval = TimeSpan.FromSeconds(0); sut.Start(); Thread.Sleep(100); job.Received().Execute(); }
public void trigger_ScopeClosed_before_closing_it_even_if_job_execution_fails() { var sl = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); var job = Substitute.For <IBackgroundJob>(); sl.CreateScope().Returns(scope); scope.Resolve(job.GetType()).Returns(job); scope.ResolveAll <IBackgroundJob>().Returns(new[] { job }); var sut = new BackgroundJobManager(sl); sut.StartInterval = TimeSpan.FromSeconds(0); sut.Start(); Thread.Sleep(100); job.Received().Execute(); }
private void BuildServices() { _appManager = new ApplicationServiceManager(CompositionRoot.Container); _appManager.ServiceFailed += OnServiceFailed; _backgroundJobManager = new BackgroundJobManager(CompositionRoot.Container); _backgroundJobManager.JobFailed += OnJobFailed; if (Debugger.IsAttached) { _backgroundJobManager.StartInterval = TimeSpan.FromSeconds(0); } else { _backgroundJobManager.StartInterval = TimeSpan.FromSeconds(10); } _backgroundJobManager.ExecuteInterval = TimeSpan.FromMinutes(5); _backgroundJobManager.ScopeClosing += OnScopeClosing; }
/// <summary> /// 开单审核提醒 /// </summary> /// <param name="processTask"></param> /// <returns></returns> public virtual async Task SendTaskConfirmRemind(ProcessTask processTask) { var remindLogManager = Resolve <RemindLogManager>(); //所有有审核权限的用户 var users = await Resolve <UserManager>().FindByPermission("Module.JGKD.Button.ConfirmProcess"); //如果任务设定了审核人,只发送给此审核人员 if (!string.IsNullOrEmpty(processTask.Verifier) && users.Exists(o => o.Name == processTask.Verifier)) { users = users.Where(o => o.Name == processTask.Verifier).ToList(); } //获取对应用户的微信登录信息 var userLogins = await UserLoginRepository.GetAll() .Where(o => users.Select(u => u.Id).Contains(o.UserId)) .Where(o => o.LoginProvider == WeChatAuthProviderApi.Name) .Select(o => new { o.ProviderKey, o.UserId }) .ToListAsync(); foreach (var userLogin in userLogins) { var openid = userLogin.ProviderKey; var name = users.Where(o => o.Id == userLogin.UserId).Single().Name; //先产生一条提醒记录 var remindLog = new RemindLog() { RemindType = "开单审核提醒", Name = name, TenantId = AbpSession.TenantId, Message = processTask.Part?.Project?.ProjectSN + processTask.Part?.PartName + processTask.ProcessType?.ProcessTypeName, }; var remindLogId = await remindLogManager.InsertAndGetIdAsync(remindLog); var arg = new SendWeiXinMessageJobArgs() { OpenId = openid, DataId = processTask.Id, RemindLogId = remindLogId, }; BackgroundJobManager.Enqueue <TaskConfirmMessageJob, SendWeiXinMessageJobArgs>(arg); } }
public void trigger_ScopeClosed_before_closing_it_after_job_Execution() { var sl = Substitute.For <IContainer>(); var job = Substitute.For <IBackgroundJob>(); var scope = Substitute.For <IContainerScope>(); sl.CreateScope().Returns(scope); scope.Resolve(job.GetType()).Returns(job); scope.ResolveAll <IBackgroundJob>().Returns(new[] { job }); ScopeClosingEventArgs actual = null; var sut = new BackgroundJobManager(sl); sut.StartInterval = TimeSpan.FromSeconds(0); sut.ScopeClosing += (o, e) => actual = e; sut.Start(); Thread.Sleep(100); actual.Should().NotBeNull(); }
public void report_job_failure_using_the_event_and_include_NoJob_if_type_cant_be_resolved() { var sl = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); var job = Substitute.For <IBackgroundJob>(); BackgroundJobFailedEventArgs actual = null; job.When(x => x.Execute()).Do(x => { throw new InvalidDataException(); }); sl.CreateScope().Returns(scope); scope.ResolveAll <IBackgroundJob>().Returns(new[] { job }); var sut = new BackgroundJobManager(sl); sut.StartInterval = TimeSpan.FromSeconds(0); sut.Start(); sut.JobFailed += (sender, args) => actual = args; Thread.Sleep(100); actual.Exception.Should().BeOfType <InvalidOperationException>(); actual.Job.Should().BeOfType <BackgroundJobManager.NoJob>(); }
public void run_next_async_job_even_if_first_fails() { var sl = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); var job = Substitute.For <IBackgroundJobAsync>(); var job2 = Substitute.For <IBackgroundJobAsync>(); job.When(x => x.ExecuteAsync()).Do(x => { throw new SqlNullValueException(); }); sl.CreateScope().Returns(scope); scope.Resolve(job.GetType()).Returns(job); scope.Resolve(job2.GetType()).Returns(job2); scope.ResolveAll <IBackgroundJobAsync>().Returns(new[] { job, job2 }); var sut = new BackgroundJobManager(sl); sut.StartInterval = TimeSpan.FromSeconds(0); sut.Start(); Thread.Sleep(10000); job2.Received().ExecuteAsync(); }
/// <summary> /// 发送往来单位公告 /// </summary> /// <param name="units"></param> /// <param name="notice"></param> /// <returns></returns> public virtual async Task SendUnitsNotice(IEnumerable <Unit> units, Notice notice) { var remindLogManager = Resolve <RemindLogManager>(); foreach (var unit in units) { //被提醒人微信openid var openId = ""; try { openId = (await FindUnitOpenId(unit))[0]; } catch (Exception ex) { } if (!string.IsNullOrEmpty(openId)) { //进行发送提醒 //先产生一条提醒记录 var remindLog = new RemindLog() { RemindType = "往来单位公告提醒", Name = unit.UnitName, Message = notice.NoticeTitle, TenantId = AbpSession.TenantId }; var remindLogId = await remindLogManager.InsertAndGetIdAsync(remindLog); var arg = new SendWeiXinMessageJobArgs() { OpenId = openId, DataId = notice.Id, RemindLogId = remindLogId }; BackgroundJobManager.Enqueue <SendUnitNoticeMessageJob, SendWeiXinMessageJobArgs>(arg); } } }
private void RunDemo() { var adapter = CreateContainer(); _serviceManager = new ApplicationServiceManager(adapter); _serviceManager.ServiceFailed += OnApplicationFailure; _serviceManager.Start(); _jobManager = new BackgroundJobManager(adapter); _jobManager.JobFailed += OnJobFailed; _jobManager.Start(); //Press enter to shut down Console.ReadLine(); _jobManager.Stop(); _serviceManager.Stop(); Console.WriteLine("Done, press enter to exit"); Console.ReadLine(); }
public void consume_exceptions_thrown_by_event_subscribers() { var sl = Substitute.For <IContainer>(); var scope = Substitute.For <IContainerScope>(); var job = Substitute.For <IBackgroundJob>(); var job2 = Substitute.For <IBackgroundJob>(); job.When(x => x.Execute()).Do(x => { throw new SqlNullValueException(); }); sl.CreateScope().Returns(scope); scope.ResolveAll <IBackgroundJob>().Returns(new[] { job, job2 }); scope.Resolve(job.GetType()).Returns(job); scope.Resolve(job2.GetType()).Returns(job2); var sut = new BackgroundJobManager(sl); sut.StartInterval = TimeSpan.FromSeconds(0); sut.JobFailed += (o, e) => { throw new Exception(); }; sut.Start(); Thread.Sleep(100); job2.Received().Execute(); }
public static void UseAutofacActivator(this BackgroundJobManager backgroundJobManager) { AutofacActivator autofacActivator = new AutofacActivator(); backgroundJobManager.SetJobActivator(autofacActivator); }
public Service(BackgroundJobManager backgroundJobManager) { _backgroundJobManager = backgroundJobManager; }
public async Task RemoveSite(long id) { await _configurationService.RemoveSite(id); BackgroundJobManager.RemoveWorker(id); }
public override void Stop() { BackgroundJobManager.Stop(); }
public override void Start() { BackgroundJobManager.Register <TestJob>(5000); BackgroundJobManager.Start(); }
public HelpController(IServiceScopeFactory scopeFactory, ILogger <HelpController> logger, BackgroundJobManager backgroundJobManager) { _scopeFactory = scopeFactory; _logger = logger; _backgroundJobManager = backgroundJobManager; }