hangfire初始化的配置方法 :UseHangfire 。

   public static class OwinBootstrapper
{
/// <summary>
/// Bootstraps Hangfire components using the given configuration
/// action and maps Hangfire Dashboard to the app builder pipeline
/// at the configured path ('/hangfire' by default).
/// </summary>
/// <param name="app">The app builder</param>
/// <param name="configurationAction">Configuration action</param>
public static void UseHangfire([NotNull] this IAppBuilder app,[NotNull] Action<IBootstrapperConfiguration> configurationAction)
{
if (app == null) throw new ArgumentNullException("app");
if (configurationAction == null) throw new ArgumentNullException("configurationAction");
// 初始化配置,给了默认值
var configuration = new BootstrapperConfiguration();
// 委托 赋值
configurationAction(configuration); if (configuration.Activator != null)
{
JobActivator.Current = configuration.Activator;
} if (configuration.Storage == null)
{
throw new InvalidOperationException("Job storage was not configured. Please call either `UseStorage` method or its overloads.");
}
// 获取当前的存储方式
JobStorage.Current = configuration.Storage;
// 通过UseFilter()将配置的过滤器放入容器中
foreach (var filter in configuration.Filters)
{
GlobalJobFilters.Filters.Add(filter);
}
// 通过UseServers()将配置的过滤器放入容器中 ,如果需要分布式配置的话,在客户端就不要配置server
foreach (var server in configuration.Servers)
{
app.RunHangfireServer(server());
}
// 将Route和权限filter注入到owin管道中
app.MapHangfireDashboard(configuration.DashboardPath, configuration.AuthorizationFilters);
}
}

用委托的方式来处理而不是让开发人员自己去实现IBootstrapperConfiguration接口

这种方式确实开发人员使用上更方便了。


      public static void MapHangfireDashboard(
[NotNull] this IAppBuilder app,
string dashboardPath,
IEnumerable<IAuthorizationFilter> authorizationFilters,
JobStorage storage)
{
if (app == null) throw new ArgumentNullException("app"); SignatureConversions.AddConversions(app); app.Map(dashboardPath,subApp => subApp.Use<DashboardMiddleware>(
storage,
DashboardRoutes.Routes,
authorizationFilters));
}
MapHangfireDashboard方法是将DashboardMiddleware注册到own管道中
dashboardPath默认值是“/hangfire”  ,也就是说当你通过 Http://www.xxx.com/hangfire 访问的每个请求都会进入DashboardMiddleware

DashboardMiddleware继承了OwinMiddleware
 // 方法在DashboardMiddleware内

        public override Task Invoke(IOwinContext context)
{
// RouteCollection 是路由规则集合,
var dispatcher = _routes.FindDispatcher(context.Request.Path.Value); if (dispatcher == null)
{
// 下一个OwinMiddleware中去处理
// 一个请求会有多个OwinMiddleware
return Next.Invoke(context);
} foreach (var filter in _authorizationFilters)
{
if (!filter.Authorize(context.Environment))
{
context.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
return Task.FromResult(false);
}
} // 输出内容
var dispatcherContext = new RequestDispatcherContext(
_storage,
context.Environment,
dispatcher.Item2); return dispatcher.Item1.Dispatch(dispatcherContext);
}

RequestDispatcherContext 内部调度实现相对有些复杂,暂时没时间去研究,我机会再分享了。 
 

关于 hangfire 初始化工作机制的更多相关文章

  1. android 6.0 高通平台sensor 工作机制及流程(原创)

    最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...

  2. malloc 函数工作机制(转)

    malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将 ...

  3. hadoop MapReduce 工作机制

    摸索了将近一个月的hadoop , 在centos上配了一个伪分布式的环境,又折腾了一把hadoop eclipse plugin,最后终于实现了在windows上编写MapReduce程序,在cen ...

  4. Session的工作机制详解和安全性问题(PHP实例讲解)

    我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. ...

  5. hostapd源代码分析(二):hostapd的工作机制

    [转]hostapd源代码分析(二):hostapd的工作机制 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004433 在我的上一 ...

  6. 深入浅出之Smarty模板引擎工作机制(二)

    源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...

  7. struts2的工作机制

    struts2的工作机制 原文:http://eoasis.iteye.com/blog/642586 概述 本章讲述Struts2的工作原理. 读者如果曾经学习过Struts1.x或者有过Strut ...

  8. 深入struts2(三)---工作机制和运行流程图

    1     工作原理 1.1     体系架构 图2.1 struts2.0体系架构图 1.2     工作机制 针对上节体系架构图,以下分步说明运行流程 Ø  client初始化一个指向Servle ...

  9. java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制

    ClassLoader的工作机制 java应用环境中不同的class分别由不同的ClassLoader负责加载. 一个jvm中默认的classloader有Bootstrap ClassLoader. ...

随机推荐

  1. Android开发之 Windows环境下通过Eclipse创建的第一个安卓应用程序(图文详细步骤)

    第一篇  windows环境下搭建创建的第一个安卓应用程序 为了方便,我这里只采用了一体包进行演示. 一.下载安卓环境的一体包. 官网下载:安卓官网(一般被墙了) 网盘下载: http://yunpa ...

  2. 常用的Linux可插拔认证模块(PAM)应用举例(一)

    pam_access.so模块 pam_access.so模块主要的功能和作用是根据主机名(包括普通主机名或者FQDN).IP地址和用户实现全面的访问控制.pam_access.so模块的具体工作行为 ...

  3. 浅谈export 以及环境变量

    简要说一下env,set,export的区别:env命令显示环境变量,set和export显示环境变量和自定变量. export:可以讲自定变量转化为环境变量之前有一个疑惑,我们定义环境变量PATH时 ...

  4. 译文 对无障碍网页应用(ARIA)的选择

    //本文编辑格式为Markdown,译文同时发布在众成翻译 对无障碍网页应用(ARIA)的选择 让网站对每个人都能访问是一件相当艰难的工作,尤其是在我们使用自定义标记解决方案(custom marku ...

  5. Web性能优化之图片延迟加载

    来源:微信公众号CodeL 对于一些图片多,页面长的网页来说,如果每次打开页面加载全部的网页内容,页面加载速度势必会受到影响,如果每次打开网页只将网页可视区域的内容加载给用户 ,将大大提高网页浏览速度 ...

  6. 手把手教你如何用ZBrush刻画脸部

    今天的ZBrush教程我们将参照一张效果图对模型进行脸部刻画.在进入课堂之前我们有必要对Layers层概念和操作有所了解,然后结合之前学习的雕刻笔刷对模型的特征表情给予重点刻画. 详细的视频教程地址请 ...

  7. 如何在ZBrush中添加毛发

    ZBrush不仅能雕刻出完美的头发造型,还能够应用真实的头发和毛发.在制作毛发之前只需要简单定义遮罩区域,包括长短.疏密.当然,最重要的是,你可以使用Polypaint生成各种有色纤维,这将非常方便. ...

  8. [ZZ]风险驱动的测试

    http://googletesting.blogspot.com/2014/05/testing-on-toilet-risk-driven-testing.html Testing on the ...

  9. 数据结构Java实现04----循环链表、仿真链表

    单向循环链表 双向循环链表 仿真链表 一.单向循环链表: 1.概念: 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形 ...

  10. AC日记——潜伏者 洛谷 P1071 (模拟)

    题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...