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

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

教程目录html

  1. 从零开始启动Osharp前端

    1.1. 使用OsharpNS项目模板建立项目git

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

    1.3. OsharpNS.Swagger使用实例(登陆和受权)web

    1.4. Angular6的前端项目启动数据库

  2. Osharp代码生成器的使用框架

    2.1 生成器的使用async

    2.2 生成代码详解(如何本身实现业务功能)ide

  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();
           }
       }

   }
相关文章
相关标签/搜索