关于 hangfire 初始化工作机制
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 初始化工作机制的更多相关文章
- android 6.0 高通平台sensor 工作机制及流程(原创)
最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...
- malloc 函数工作机制(转)
malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将 ...
- hadoop MapReduce 工作机制
摸索了将近一个月的hadoop , 在centos上配了一个伪分布式的环境,又折腾了一把hadoop eclipse plugin,最后终于实现了在windows上编写MapReduce程序,在cen ...
- Session的工作机制详解和安全性问题(PHP实例讲解)
我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. ...
- hostapd源代码分析(二):hostapd的工作机制
[转]hostapd源代码分析(二):hostapd的工作机制 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004433 在我的上一 ...
- 深入浅出之Smarty模板引擎工作机制(二)
源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...
- struts2的工作机制
struts2的工作机制 原文:http://eoasis.iteye.com/blog/642586 概述 本章讲述Struts2的工作原理. 读者如果曾经学习过Struts1.x或者有过Strut ...
- 深入struts2(三)---工作机制和运行流程图
1 工作原理 1.1 体系架构 图2.1 struts2.0体系架构图 1.2 工作机制 针对上节体系架构图,以下分步说明运行流程 Ø client初始化一个指向Servle ...
- java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制
ClassLoader的工作机制 java应用环境中不同的class分别由不同的ClassLoader负责加载. 一个jvm中默认的classloader有Bootstrap ClassLoader. ...
随机推荐
- Solr与HBase架构设计
摘要:本篇是本人在做一个大数据项目时,对于系统架构的一点总结,如何在保证存储量的情况下,又能保证数据的检索速度. 前提: Solr.SolrCloud提供了一整套的数据检索方案,HBase提 ...
- cocos2d-x之xml文件读取初试
auto doc=new tinyxml2::XMLDocument(); doc->Parse(FileUtils::getInstance()->getStringFromFile(& ...
- Linux awk
一.简介 二.教程 1)过滤字符(对大小写很敏感) dir -l | awk '$3=="root" {print $1,$3,$4, $9;} ' cat tecmint_dea ...
- 用VB实现点名程序
用vb实现点名程序主要是随机变量的产生和数据的读取和存储以及计时器程序的设计,读取的文件命名为data.txt,书写格式为第一行为总人数下面的每行为一个人名,在应用时最好把data文件和程序文件放在一 ...
- redis master配置了密码进行主从同步
1.如果master不设置密码,那么直接在slave服务器配置slaveof即可 配置如下 #slaveof ip 端口 slaveof 配置好我们看下redis的日志 看是否同步成功 :S Jan ...
- HttpClient如何解决302重定向问题
最近的接口测试,发现接口地址报302错误,通过上网搜索,发现问题所在,解决办法是需要请求重定向后的URI. package com.btv; import org.apache.http.Header ...
- hdu-5920 Ugly Problem(贪心+高精度)
题目链接: Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- Unity 2D Skeletal Animation
本文记录在Unity中制作2D 骨骼动画的笔记 Unity版本:4.3 Uni2D 使用骨骼动画前,把Sprite Mesh 的Type 改为 Grid ,设置合适的骨骼数量和分配权重 1.选中创建好 ...
- Apache轻量级性能测试工具
平时工作中会需要一些性能测试,简单的性能测试完全可以由AB来替代,而不需要动用LR这样重量级的工具. 此文简单介绍一下ab的工具使用与结果分析.当作个笔记,以便以后查阅. 1.安装:要使用AB,需要先 ...
- 关于Yii2中count方法的使用
统计文章与分类中间表中c_id的数目,也就是category表中total字段的值 原生SQL语句:select count(c_id) from article_category where c_i ...