OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用

OsharpNS轻量级.net core快速开发框架简明入门教程

教程目录

  1. 从零开始启动Osharp

    1.1. 使用OsharpNS项目模板创建项目

    1.2. 配置数据库连接串并启动项目

    1.3. OsharpNS.Swagger使用实例(登录和授权)

    1.4. Angular6的前端项目启动

  2. Osharp代码生成器的使用

    2.1 生成器的使用

    2.2 生成代码详解(如何自己实现业务功能)

  3. Osharp部分模块使用

    3.1 Osharp.Redis使用

    3.2 Osharp.Hangfire使用

    3.3 Osharp.Permissions使用

  4. Osharp深度学习和使用

    4.1 切换数据库(从SqlServer改为MySql)

    4.2 多上下文配置(多个数据库的使用)

    4.3. 自定义模块的定义(Senparc.Weixin的使用)

    4.4. 继续学习中....

OsharpNS官方资源
项目地址:https://github.com/i66soft/osharp-ns20
演示地址:https://www.osharp.org 直接使用QQ登录可以查看效果
文档地址:https://docs.osharp.org 正在完善中....
发布博客:https://www.cnblogs.com/guomingfeng/p/osharpns-publish.html 大神看这个文档应该就能跑起来,从零开始启动Osharp基于此文档完成
VS生成器插件:https://marketplace.visualstudio.com/items?itemName=LiuliuSoft.osharp
官方交流QQ群:85895249

OsharpNS.Hangfire使用

  1. 启用OsharpNS.Hangfire

    配置文件中找到配置节点Hangfire (配置文件有两个,一个开发,一个发布,别改错地方)

        "Hangfire": {
          "WorkerCount": 20,
          "StorageConnectionString": "Server=phone.qiadoo.com;Port=3306;UserId=candoo;Password=密码;Database=CanDoo.KaKa.Hangfire;charset='utf8';Allow User Variables=True", //这里是数据库的连接串 用什么数据库就用什么数据库的连接串(官方默认是SqlServer的,我这里用的是MySql)
    
          "DashboardUrl": "/hangfire",
          "Roles": "", //这个有可能确定可以访问的用户的角色,没测试过
    
          "Enabled": true
    
        }
  2. 改用MySql作为Hangfire的数据库

    官方使用的是SqlServer,只要配置好连接串就可以使用了,我用的是MySql,所以要改动一些东西

    2.1 安装Hangfire的MySql支持库

      通过Nuget安装`Hangfire.MySql.Core`

    2.2 Startups中继承HangfirePack新建一个MyHangfirePack

    
    using Hangfire;
    using Hangfire.MySql.Core;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using OSharp.Extensions;
    using OSharp.Hangfire;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace CanDoo.Test.Web.Startups
    {
        public class MyHangfirePack : HangfirePack
        {
            /// <summary>
            /// AddHangfire委托,重写可配置Hangfire服务,比如使用UseSqlServerStorage等
            /// </summary>
            /// <param name="services">服务容器</param>
            /// <returns></returns>
            protected override Action<IGlobalConfiguration> GetHangfireAction(IServiceCollection services)
            {
                IConfiguration configuration = services.GetConfiguration();
                string storageConnectionString = configuration["OSharp:Hangfire:StorageConnectionString"].CastTo<string>();
                if (storageConnectionString != null)
                {
                    return config => config.UseStorage(new MySqlStorage(storageConnectionString));
                }
    
                return config => { };
            }
        }
    }
  3. 看看效果

    3.1 按照连接串去新建Hangfire用的空数据库(只要库就可以,表自己会生成)

    3.2 启动web项目

    3.3 访问http://localhost:7001/hangfire/就能看到Hangfire的界面了

    3.4 具体的使用参考,文件位于CanDoo.Test.Web.Hangfire

   // -----------------------------------------------------------------------
   //  <copyright file="HangfireJobRunner.cs" company="OSharp开源团队">
   //      Copyright (c) 2014-2018 OSharp. All rights reserved.
   //  </copyright>
   //  <site>http://www.osharp.org</site>
   //  <last-editor>郭明锋</last-editor>
   //  <last-date>2018-12-31 17:36</last-date>
   // -----------------------------------------------------------------------

   using System;
   using System.Collections.Generic;
   using System.Diagnostics;
   using System.Linq;
   using System.Threading.Tasks;

   using Hangfire;

   using CanDoo.Test.Identity;
   using CanDoo.Test.Identity.Entities;

   using Microsoft.AspNetCore.Identity;
   using Microsoft.Extensions.DependencyInjection;

   using OSharp.Collections;
   using OSharp.Dependency;
   using OSharp.Entity;
   using OSharp.Hangfire;

   namespace CanDoo.Test.Web.Hangfire
   {
       [Dependency(ServiceLifetime.Singleton)]
       public class HangfireJobRunner : IHangfireJobRunner
       {
           public void Start()
           {
               BackgroundJob.Enqueue<UserManager<User>>(m => m.FindByIdAsync("1"));
               string jobId = BackgroundJob.Schedule<UserManager<User>>(m => m.FindByIdAsync("2"), TimeSpan.FromMinutes(2));
               BackgroundJob.ContinueWith<TestHangfireJob>(jobId, m => m.GetUserCount());
               RecurringJob.AddOrUpdate<TestHangfireJob>(m => m.GetUserCount(), Cron.Minutely, TimeZoneInfo.Local);
               RecurringJob.AddOrUpdate<TestHangfireJob>(m=>m.LockUser2(), Cron.Minutely, TimeZoneInfo.Local);
           }
       }

       public class TestHangfireJob
       {
           private readonly IIdentityContract _identityContract;
           private readonly IServiceProvider _provider;

           /// <summary>
           /// 初始化一个<see cref="TestHangfireJob"/>类型的新实例
           /// </summary>
           public TestHangfireJob(IIdentityContract identityContract, IServiceProvider provider)
           {
               _identityContract = identityContract;
               _provider = provider;
           }

           /// <summary>
           /// 获取用户数量
           /// </summary>
           public string GetUserCount()
           {
               List<string> list = new List<string>();
               list.Add(_identityContract.Users.Count().ToString());
               list.Add(_identityContract.GetHashCode().ToString());
               return list.ExpandAndToString();
           }

           public async Task<string> LockUser2()
           {
               List<string> list = new List<string>();
               UserManager<User> userManager = _provider.GetService<UserManager<User>>();
               User user2 = await userManager.FindByIdAsync("2");
               list.Add($"user2.IsLocked: {user2.IsLocked}");
               user2.IsLocked = !user2.IsLocked;
               await userManager.UpdateAsync(user2);
               IUnitOfWork unitOfWork = _provider.GetUnitOfWork<User, int>();
               unitOfWork.Commit();
               user2 = await userManager.FindByIdAsync("2");
               list.Add($"user2.IsLocked: {user2.IsLocked}");
               return list.ExpandAndToString();
           }
       }

   }

原文地址:https://www.cnblogs.com/candoo/p/10795095.html

时间: 2024-11-09 11:33:41

OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用的相关文章

UltimateAndroid快速开发框架简介与教程(也是一套Android快速开发的教程)

UltimateAndroid是一套集成了许多现有优秀的Android开源类库并将之组合成一个整体的Android快速开发框架. github地址:https://github.com/cymcsg/UltimateAndroid 框架目前主要包含的功能有View Injection,ORM,异步网络请求和图片加载,自动化脚本测试,磁盘LRU等功能.同时提供了类似于TripleDes.Webview快速设置.Md5处理.String处理,Https处理等常用工具类,还有多种UI控件效果.并且这些

discuz简明入门教程

一.整个站点的基本结构: 1.首先,介绍网站最主要的三个文件夹:root\source\.root\template\.root\static\,分别是代码文件夹.模版文件夹.静态文件夹(js.css.image等). 2.其次,介绍一些基本的控制文件. 入口文件[ root\xxx.PHP ],包括forum.php.portal.php.home.php等,作用是控制页面的转向,每一个入口文件中都包含了内核(core_class).方法(function_xxx).模块(module)三个最

MongoDB超级简明入门教程

1.概念篇 MongoDB和MySQL分别作为非关系型数据库和关系型数据库的代表,通过它们之间的对比可以很快的建立起对MongoDB的认知. MongoDB MySQL 数据库(Database) 数据库(Database) 集合(Collection) 表(Table) 文档(Document) 记录(record) 对于关系型数据库,一般来说,我们可以简单的理解为:一个数据库管理应用,可以创建多个数据库(databases),每个数据库可以管理很多个表(tables),表中存储的就是可以CU

【ASP.NET Core快速入门】(二)部署到IIS

原文:[ASP.NET Core快速入门](二)部署到IIS 配置IIS模块 ASP.NET Core Module载地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module?tabs=aspnetcore2x 安装后再IIS管理器模块页面会出现aspnetcoremodule 新建网站 修改应用池 网站发布 控制台方式 dotnet publish发布到项目文件的bin/deb

ASP.NET Core模块化前后端分离快速开发框架介绍之4、模块化实现思路

源码 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:http://129.211.40.240:6220 账户:admin 密码:admin 前端框架演示地址(临时) 地址:http://progqx5cu.bkt.clouddn.com/skins/index.html#/ 账户:admin 密码:admin 目录 1.开篇 2.快速创建一个业务模块 3.数据访问模块介绍 4.模块化实现思路 获取官方源码 为了方便查看源码,我们先获

.NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

.NET Core前后端分离快速开发框架(Core.3.0+AntdVue) 目录 引言 简介 环境搭建 开发环境要求 基础数据库构建 数据库设计规范 运行 使用教程 全局配置 快速开发 管理员登录 系统用户管理 系统角色管理 权限管理 接口秘钥管理 系统日志 单库事务 跨库事务 读写分离分库分表 常见疑问 如何进行联表查询 如何切换数据库类型 如何使用多个数据库 引言 时间真快,转眼今年又要过去了.回想今年,依次开源发布了Colder.Fx.Net.AdminLTE(254Star).Cold

EF Core 快速上手——EF Core 入门

EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用 ??本文是对<Entity framework in action>部分章节的翻译,某些场景也会附上笔者实践的Demo.尽管很认真的斟酌,但是水平有限,还请各位批评和斧正. ??Entity Framework Core, 或者 EF Core,是一个方便软件工程师访问数据库的库.有很多方法来构建这样的一个库

基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://gith

android快速开发框架

一.依赖注入DI通过依赖注入减少View.服务.资源简化初始化,事件绑定等重复繁琐工作1. AndroidAnnotations(Code Diet) android快速开发框架项目地址:https://github.com/excilys/androidannotations文档介绍:https://github.com/excilys/androidannotations/wiki官方网站:http://androidannotations.org/特点:(1)依赖注入:包括view,ext