quartz.net

Quartz.NET

半城伤御伤魂 提交于 2021-02-09 12:05:24
译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 7: TriggerListeners and JobListeners 监听器是为调度程序中发生的事件执行操作而创建的对象. 如你所猜, TriggerListeners 接收和触发器相关的事件, JobListeners 接收作业相关的事件. 触发器相关的事件包括: 触发器触发, 触发器误触发 (在本文档的 "触发器" 部分有说到), 以及触发器完成 (触发器触发的作业已完成). ITriggerListener 接口: public interface ITriggerListener { string Name { get; } Task TriggerFired(ITrigger trigger, IJobExecutionContext context); Task<bool> VetoJobExecution(ITrigger trigger, IJobExecutionContext context); Task TriggerMisfired(ITrigger trigger); Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, int triggerInstructionCode); }

终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的

风格不统一 提交于 2021-01-25 06:59:38
一:背景 1. 讲故事 前几天有位朋友让我有时间分析一下 aspnetcore 中为什么向 ServiceCollection 中注入的 Class 可以做到 Singleton,Transient,Scoped,挺有意思,这篇就来聊一聊这一话题,自从 core 中有了 ServiceCollection, 再加上流行的 DDD 模式,相信很多朋友的项目中很少能看到 new 了,好歹 spring 十几年前就是这么干的。 二:Singleton,Transient,Scoped 基本用法 分析源码之前,我觉得有必要先介绍一下它们的玩法,为方便演示,我这里就新建一个 webapi 项目,定义一个 interface 和 concrete ,代码如下: public class OrderService : IOrderService { private string guid; public OrderService ( ) { guid = $ "时间: {DateTime.Now} , guid= { Guid.NewGuid()} " ; } public override string ToString ( ) { return guid; } } public interface IOrderService { } 1. AddSingleton

教你配置windows上的windbg,linux上的lldb,打入clr内部这一篇就够了

杀马特。学长 韩版系。学妹 提交于 2021-01-09 07:00:02
一:背景 1. 讲故事 前几天公众号里有位兄弟看了几篇文章之后,也准备用windbg试试看,结果这一配就花了好几天,(づ╥﹏╥)づ,我想也有很多跃跃欲试的朋友在配置的时候肯定会遇到这样和那样的问题,所以我觉得有必要整理一下,让大家少走弯路。 二:一些基础概念 1. 在哪下载 现在安装windbg越来越麻烦,还要安装Windows 10 SDK,很多人就栽在这里,其实大家可以直接在网上找一键打包的windbg 6.0版本即可,才30多M,调生产调本地都很方便,顺带还可以练练SOS命令。 云盘:https://pan.baidu.com/s/1VqXVIGVHxAZVPNds1525Jg 提取码:mahg 外网:http://www.33lc.com/soft/96743.html 2. 版本问题 解压打开会有一个x64和x86文件夹,很显然,32位的程序用x86下的windbg调试,64位的程序用x64的windbg调试,如下图: 3. 其他的问题 我比较喜欢用64bit程序,所以这里使用64位的windbg。 <1> 配置微软公有符号 符号其实就是pdb文件,我们在debug模式下编译项目都会看到这个,它的作用会对dll进行打标,这样在调试时通过pdb就能看到局部变量,全局变量,行号等等其他信息,在FCL类库中的pdb文件就放在微软的公有服务器上, SRV*C:\mysymbols

.NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练

我只是一个虾纸丫 提交于 2021-01-08 20:03:23
一、课程介绍 明人不说暗话,跟着阿笨一起玩NET 。本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程!本次分享课程给大家带来的是《.NET开源作业调度框架实战项目演练》实战技能课程,如果您对本次分享课程感兴趣的话,那么请跟着一起学习吧! 1.1、课程内容以及知识点? 一般的项目中都会需要处理的后台定时作业任务,有时候当我们的定时任务计划比较多的情况时候,我们能否有一种优雅的通用处理框架来解决呢?答案是肯定的!阿笨根据自己的实际工作经验出发,站在第一线开发者的从业角度出发,从而避免大家重复造轮子,阿笨分享的干货内容,希望大家学完本次分享课程后,能够做到现学现用直接运用到实际项目去。 本次分享课程包含知识点如下: 1)、Quartz.NET牛刀小试(ABenNet.QuartzNet.Practice)。 2)、基于Quartz.Net工厂封装实现一行代码搞定作业调度。 3)、 如何优雅的封装FluentScheduler实现作业调度框架(基于Topshlf+Quartz.Net封装的实际项目场景运用) 。 4)、FluentScheduler牛刀小试(ABenNet.FluentScheduler.Practice)。 5)、

如何从零开发一个NuGet软件包?

孤街醉人 提交于 2020-12-25 12:01:07
作者:依乐祝 首发地址:https://www.cnblogs.com/yilezhu/p/14175019.html 我想目前每个.net开发人员都应该知道nuget.org和NuGet软件包吧。但是,您是否曾经尝试并创建过一个nuget包呢?Nuget软件包比较容易引入到类库中。因此,可以使用NuGet软件包管理器将nuget软件包添加到任何项目中。 Nuget包的剖析 Nuget软件包不仅是 dll 文件。NuGet包是可移植的,它包含您要放入.Net项目中的所有内容。您可以在其中放置txt文件或png文件。这就是为什么我们称它们为“包裹”。您可以打包一些开发文件,并将它们以.nupkg格式在项目之间移动。 我刚刚解压缩了InputKit的nuget包,您可以在下图中看到nupkg文件的树状视图。 因此,只需查看其中的文件夹和文件。 icon.png: 这是您的NuGet包的图标文件。现在已将其嵌入.nupkg中,但在早期版本的NuGet中只能定义为url。 .nuspec nuspec是关于nuget包的元数据文件。在早期版本中,它曾经用于打包nuget包。但是在新的dotnet CLI中,此文件是由roslyn编译器从您的.csproj文件生成的。它包括软件包的目标框架,名称,许可证,图标,标签,与其他包的依赖关系以及其中描述的要放置到添加的项目中的静态文件。

第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)

我与影子孤独终老i 提交于 2020-11-13 09:31:00
一. 时间的类型 1. 背景    这里为什么要介绍时间类型呢,明明是定时调度篇,原因是在定时任务中,任务什么时间开始执行,什么时间结束执行,要用到各种各样的时间模式,虽然这不能算是一个复杂的问题,但在正式介绍Quartz.Net之前,还是很有必要补充一下的,该章节就是解决这类问题的。 2. 时间类型   时间类型主要有两类:DateTime和DateTimeOffset (详情参考:https://docs.microsoft.com/zh-cn/dotnet/standard/datetime/choosing-between-datetime) (1). DateTime:表示的时区有限,国内采用这个时间。 (2). DateTimeOffset:可以表示任何时区,通过偏移量来控制。 (Quartz中提供DateBuilder类来实现DateTimeOffset类型) 3. 类型转换 (1). DateTime→DateTimeOffset 利用DateTimeOffset的构造函数 (2). DateTimeOffset→DateTime 利用Convert.ToDateTime方法 下面分享一段两种类型相互转换的代码: 1 // DateTime类型 2 DateTime date1 = DateTime.Parse( " 2018-01-01 11:45:30 " );

ASP.NET Core 3.1 中使用JWT认证

北战南征 提交于 2020-11-03 03:16:35
转自: 小伟06 cnblogs.com/liuww/p/12177272.html JWT认证简单介绍 关于Jwt的介绍网上很多,此处不在赘述,我们主要看看jwt的结构。 JWT主要由三部分组成,如下: HEADER .PAYLOAD .SIGNATURE HEADER包含token的元数据,主要是加密算法,和签名的类型,如下面的信息,说明了 加密的对象类型是JWT,加密算法是HMAC SHA-256 { "alg" : "HS256" , "typ" : "JWT" } 然后需要通过BASE64编码后存入token中 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 Payload主要包含一些声明信息(claim),这些声明是key-value对的数据结构。 通常如用户名,角色等信息,过期日期等,因为是未加密的,所以不建议存放敏感信息。 { "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" : "admin" , "exp" : 1578645536 , "iss" : "webapi.cn" , "aud" : "WebApi" } 也需要通过BASE64编码后存入token中

ASP.NET Core 中间件

匆匆过客 提交于 2020-10-29 17:02:51
转自:梦里小探花 cnblogs.com/aoximin/p/13576479.html 前言 对中间件的一个概况,在《重新整理.net core 计1400篇》系列后面会深入。 正文 什么是中间件呢? 其实中间件这个概念来源于分布式,当然这是一个狭隘的概念了,现在中间件概念就非常广泛了。 官网给出了这样一张图,这张图认为从请求到响应过程中间都是中间件,包括我们认为的路由。 看一段node代码: var http = require ( "http" ); http.createServer( function (req,res){ res.writeHead( 200 ,{ "Content-type" : "text/blain" }); res.write( "Hello NodeJs" ); res.end(); }).listen( 8888 ); 没有学过node 也是ok的,从字面意思就是创建了一个http服务,然后端口是8888。 createServer 可以传入一个方法,中间有两个参数,一个参数是req,另一个参数就是res。 其实就是这么回事,我们写的就是这个这个方法里面的代码,至于,你想拿到req的什么参数,或者给res写入什么信息,这些都是中间件的范畴。 那么问题来了,问什么叫做中间件呢?从语文的层面上理解,那就是分开的,一件一件的。

Quartz.Net系列(十六):Misfire策略在SimpleScheduler和CronScheduler中的使用

孤人 提交于 2020-10-25 07:07:12
1.场景 ①因为工作线程都在忙碌,所以导致某些Trigger得不到触发 也就是默认10个工作线程而我有15个Trigger同时触发 这就导致有5个不能被触发,而不幸的是Trigger所关联的Job执行时间特别长 如果某些Trigger超过指定的阈值那么就不会触发 ②Scheduler挂掉了。。。某些时刻又恢复了 ③如果你设置的时间早于现在,中有一个StartAt 2.阈值是多少 RAMJobStore默认是5s,DBJobStore是60s 为了统一阈值,在初始化的时候,会读取内置的quartz.config文件,统一设置成60s private TimeSpan misfireThreshold = TimeSpan.FromSeconds( 5 ); quartz.jobStore.misfireThreshold = 60000 3.Misfire的策略 ①错过几次让它立刻执行,后面正常调度 ②错过的几次让他合并成一次执行,后面正常调度 ③忽略错误的次数,正常调度 4.SimpleScheduler怎么使用Mrsfire策略 one IScheduler scheduler= await SchedulerBuilder.Create().Build(); await scheduler.Start(); var job = JobBuilder.Create<MyJob>

实战解读ASP.NET Core身份认证

淺唱寂寞╮ 提交于 2020-10-07 15:55:16
长话短说:上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证。 身份验证是确定用户身份的过程。授权是确定用户是否有权访问资源的过程。 1. 万变不离其宗 显而易见,一个常规的身份认证用例包括两部分: ① 对用户进行身份验证 ② 在未经身份验证的用户试图访问受限资源时作出反应 已注册的身份验证处理程序及其配置选项被称为“方案”,方案可用作一种机制,供用户参考相关处理程序的身份验证、挑战和禁止行为。 我们口头上常说的: 基于cookie认证方案,若认证成功,go on,若认证失败则跳转回登录页面; 基于基本身份认证(BA)方案,若认证成功,go on,若认证失败则给浏览器返回 WWW-Authenticate 标头, 浏览器会再次弹出认证窗口。 2. ASP.NET Core认证原理 在 ASP.NET Core 中,身份验证由 IAuthenticationService 负责,身份验证服务会调用已注册的身份验证处理程序来完成与身份验证相关的操作, 整个验证过程由 认证中间件 来串联。 一图以蔽之: 其中有几个关键步骤 添加认证方案 由配置项 AuthenticationSchemeOption 、认证处理程序组成。 基于Cookie的认证方案可在Options项中可指定登录地址,