集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:400-111-8989  |   联系客服   |
当前位置:主页 > 培训课程 > .NET >

成都.NET培训:.NET Core开源组件:后台任务利器之

发布者: 成都达内     浏览次数:     发布时间:2017-04-20 15:12:34

Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库。在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4.X环境中配置always running的麻烦,真正做到开...

  Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库。在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4.X环境中配置always running的麻烦,真正做到开箱即用。

  一.安装

  Hangfie官方支持是MsSql和redis,除此之外,可供选择的还有PostgreSql和Mongo。

  在应用入口项目需要引用Hangfire.AspNetCore和特定持久库,比如使用了MsSql数据库的Hangfire.SqlServer。

  而在其他项目(比如bll层的项目),只需引用基础的Hangfire.Core就可以了。

  二.Startup配置

  1.注入Hnagfire服务

  services.AddHangfire(x => x.UseSqlServerStorage(""));

  2.可选配置

  启动Hangfire服务和对应的web面板如下:

  app.UseHangfireServer();//启动Hangfire服务 app.UseHangfireDashboard();//启动hangfire面板

  细心的观众可能会发现,这两个方法都有可选参数,可以提供更多的配置。

  2.1 配置任务属性

  var jobOptions = new BackgroundJobServerOptions

  {

  Queues = new[] { "test","default" },//队列名称,只能为小写

  WorkerCount = Environment.ProcessorCount * 5, //并发任务数

  ServerName="hangfire1",//服务器名称

  };

  app.UseHangfireServer(jobOptions);

  Queues 要处理的队列列表

  对于有多个服务器同时连接到数据库,Hangfire会认为他们是分布式中的一份子。现实中不同服务器往往存在着差异,这个时候就需要合理配置服务器(应用)的处理队列,举两个例子:

  1.对于服务器性能差异的处理,有100个A任务和50个B任务需要处理,假设A服务器的性能是B服务器的两倍,如果不配置队列,那么会平分任务给两个服务器。如果我们只让B服务器处理B任务,而A服务器同时处理两种任务,这样B就能减少一些压力。

  2.对于服务器能力差异的处理,假设A服务器能处理A和B两种任务,B服务器只能处理B任务(没有处理A任务的方法或对象),如果不配置队列,默认会让B也执行A任务,从而产生错误。反面一想,如果A服务器和B服务器都有共同的接口,B服务器不实现接口的方法,发起一个专属于A服务器队列的任务,而A服务器通过注入实现接口的方法,可以达到传递任务的效果。

  WorkerCount 并发任务数,超出并发数将等待之前的任务完成

  默认的并发任务数是线程(cpu)的5倍,如果IO密集型任务多而CPU密集型的任务少,可以考虑调高并发任务数。

  以上是我用到的,当然还有其他配置参数等着你去开发。

  2.2.配置访问权限

  在实际生产中,我们可能不希望任何人都可以访问面板,或暂停执行某些任务,这时就需要重写面板的权限了。默认情况下,只有本地访问权限才能使用Hangfire仪表板。所以需要重写控制面板,以便远程访问。

  var options = new DashboardOptions

  {

  Authorization = new[] { new HangfireAuthorizationFilter() }

  };

  app.UseHangfireDashboard("/hangfire", options);

  public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter

  { //这里需要配置权限规则 public bool Authorize(DashboardContext context)

  { return true;

  }

  }

  三.使用(文档)

成都.NET培训

  任务类型

  Fire-and-forget 直接将任务加入到待执行任务队列

  Delayed 在当前时间后的某个时间将任务加入到待执行任务队列

  Recurring 周期性任务,每一个周期就将任务加入到待执行任务队列

  Continuations 顾名思义,继续执行任务

  1.简单入门

  using (var connection = JobStorage.Current.GetConnection())

  {

  var storageConnection = connection as JobStorageConnection;

  if (storageConnection != null)

  {

  //立即启动

  var jobId = BackgroundJob.Enqueue(()=>Console.WriteLine("Fire-and-forget!"));

  }

  }

  当然,不仅仅只有静态方法可以执行,Hangfire的任务也是支持.net core的依赖注入的,会构造一个对象并执行对应的方法。

  BackgroundJob.Enqueue(i => i.SomeMethod(someParams))

  2.进阶功能

  2.1设置任务队列

  [Queue("test")]public void TestQueue()

  {

  }

  对于非周期任务,只需要在执行的方法添加Queue的特性就能指定该任务让特定的队列服务器处理。

  而周期任务,则需要先声明:

  RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"),Cron.Daily,queue:"test");

  2.2 使用日志过滤器

  Hangfire支持自定义过滤器,可以对任务在创建时、执行中、执行后等等状态执行特定特定的操作。

  //特定方法过滤器

  [LogEverything]public static void Send() {

  }//全局过滤器

  GlobalJobFilters.Filters.Add(new LogEverythingAttribute());

  四.中文翻译

  hangfire是一个不错的开源后台任务组件,很奇怪的是没有中文文档。最近几天,简单地用谷歌机翻修改了部分章节,如果哪位同行看完后有兴趣翻译,可以联系一下我。

  文档在github的地址:https://github.com/jonechenug/Hangfire-Chinese-Doc

  docker运行并访问本地8080端口:

  docker run --restart always --name hangfire -d -p 8080:80 daocloud.io/koukouge/hangfirezhdoc

  成都it培训哪家好,当然是成都达内培训,成都达内是一家专业的程序员培训机构,专注于成都嵌入式培训,成都web前端培训,成都.NET培训,成都大数据培训,成都会计实操培训,成都IT培训,成都编程培训等IT培训,专业的成都软件培训机构,专业师资授课,真实项目实战、零首付、低押金、名企就业。

(责任编辑:成都达内)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:400-111-8989

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:400-111-8989

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:400-111-8989

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56 蜀ICP备18021046号-3