C# ABP源码详解 之 BackgroundJob,后台工作(一)

时间:2022-01-08 22:40:28

本文归属作者所有,转发请注明本文链接。

1. 前言

ABP的BackgroundJob,用来处理耗时的操作。比如客户端上传文件,我们要把文件(Excel)做处理,这耗时的操作我们应该放到后台工作者去做,从而不会让用户有‘延迟’的感觉。

ABP的backgroundJob最终运行是在一个InMemoryBackgroundJobStore中运行,它只是定义了一个Dictionary来存储job,并且遍历运行 。当然,觉得不爽可以做改造。

2. 类图研究

我整理了BackgroundJob一些类图,如下:

C# ABP源码详解 之 BackgroundJob,后台工作(一)

1)IRunnable,是定义了线程的开启、停止等操作。因为backgroundJob说白了就是启动线程在不停地运行。

2)IBackgroundJobManager,定义了Job的管理,例如吧Job放到队列中运行。

3)PeriodicBackgroundWorkerBase,控制了线程AbpTimer的运行、停止、等待等操作。

4)IBackgroundJobStore,定义了插入、删除、更新、查询后台工作者。现在的后台工作者存储在Member中(用InMemoryBackgroundJobStore实现),你可以改造存储在数据库、云队列中。

3. ABP Zero模块中的BackgroundJobStore

我们打开ABP Zero模块中的backgroundjob包,只发行一个类BackgroundJobStore。它实现了IBackgroundJobStore,并且把Job放到数据库中来处理。这样虽然安全性提高了,但是性能较低,需要看我们的实际业务。

BackgroundJobStore中有一个BackgroundJobInfo的仓储(Repository),用来存储所有的Job。

下一篇文章,将对其进行改造。因为我们的系统是一个高并发系统

可以关注本人的公众号,多年经验的原创文章共享给大家。

C# ABP源码详解 之 BackgroundJob,后台工作(一)

C# ABP源码详解 之 BackgroundJob,后台工作(一)的更多相关文章

  1. OkHttp3源码详解(六) Okhttp任务队列工作原理

    1 概述 1.1 引言 android完成非阻塞式的异步请求的时候都是通过启动子线程的方式来解决,子线程执行完任务的之后通过handler的方式来和主线程来完成通信.无限制的创建线程,会给系统带来大量 ...

  2. Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解

    Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解 今天主要理一下StreamingContext的启动过程,其中最为重要的就是Jo ...

  3. spring事务详解(三)源码详解

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  4. 条件随机场之CRF++源码详解-预测

    这篇文章主要讲解CRF++实现预测的过程,预测的算法以及代码实现相对来说比较简单,所以这篇文章理解起来也会比上一篇条件随机场训练的内容要容易. 预测 上一篇条件随机场训练的源码详解中,有一个地方并没有 ...

  5. [转]Linux内核源码详解--iostat

    Linux内核源码详解——命令篇之iostat 转自:http://www.cnblogs.com/york-hust/p/4846497.html 本文主要分析了Linux的iostat命令的源码, ...

  6. saltstack源码详解一

    目录 初识源码流程 入口 1.grains.items 2.pillar.items 2/3: 是否可以用python脚本实现 总结pillar源码分析: @(python之路)[saltstack源 ...

  7. Shiro 登录认证源码详解

    Shiro 登录认证源码详解 Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证.授权管理.企业级会话管理和加密等功能,相比 Spring Security 来说要更加 ...

  8. udhcp源码详解(五) 之DHCP包--options字段

    中间有很长一段时间没有更新udhcp源码详解的博客,主要是源码里的函数太多,不知道要不要一个一个讲下去,要知道讲DHCP的实现理论的话一篇博文也就可以大致的讲完,但实现的源码却要关心很多的问题,比如说 ...

  9. Activiti架构分析及源码详解

    目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...

随机推荐

  1. 查询oracle RAC实例名称等信息

    select * from gv$instance;

  2. python oop __slots__方法

    动态语言python 可以在程序运行的情况下给class加上功能.具体为 #引入一个 from types import MethodType #方法 #然后 s.set_age = MethodTy ...

  3. HIVE快速入门

    (一)简单入门 1.创建一个表 create table if not exists ljh_emp( name string, salary float, gender string) commen ...

  4. InsertSort 插入排序

    插入排序:将下一个插入已排好的序列中 自己觉得演示的号的一个文章地址 http://sjjg.js.zwu.edu.cn/SFXX/sf1/zjcr.html 下面是java的实现代码: //Inse ...

  5. DLNA架构在机顶盒上播放云存储文件的实现

    DLNA 架构在机顶盒上播放云存储文件的实现   摘要: 随着越来越多的数码设备,音像设备等对 UPNP 协议的支持和普及,业界对多媒体内容提供服务的需求越越来越强烈,为了实现遵循 UPNP 协议和  ...

  6. asp.net Listbox控件用法

    2008-02-18 19:56 来源: 作者: ListBox(列表框)控件可以显示一组项目的列表,用户可以根据需要从中选择一个或多个选项.列表框可以为用户提供所有选项的列表.虽然也可设置列表框为多 ...

  7. Python基础之数组和向量化计算总结

    一.多维数组 1.生成ndarray     (array函数) .np.array()生成多维数组 例如:import numpy as npdata1=[6,7.5,8,0,1]     #创建简 ...

  8. listview 选择后高亮显示

    public class UserTypeParentAdapter extends MyBaseAdapter<UserTypeList> { private int selectIte ...

  9. 杭高OI20190125 (genies出题)

    /* 当一个人先从自己的内心开始奋斗,他就开始迈向了成功 ——genies (朝阳的二愣子) */ HGOI寒假赛第一场,欢迎来自各种学校的各式各样的巨老233333 感觉自己好渺小.还是NOIP ( ...

  10. CEF解决加载慢问题

    转载:http://blog.csdn.net/weolar/article/details/51994895 CEF加载慢的时候,加上以下代码,通过命令行的方式: CefRefPtr<CefC ...