hangfire的使用


1.安装:

hangfire包、StackExchange.Redis(abp下的hangfire则安装abp.hangfire)

2.配置

startup文件configuration方法添加以下代码

GlobalConfiguration.Configuration.UseRedisStorage("127.0.0.1:6379");//redis配置
            app.UseHangfireServer(new BackgroundJobServerOptions() {ServerName="testserver", Queues=new string[] { "testqueue"} });//开启hangfire服务并进行初始化
            app.UseHangfireDashboard();//使用仪盘表

3使用

 public class HomeController : KenzoTestControllerBase
    {
        private readonly IBackgroundJobManager _backgroundJobManager;
        private readonly ITestOrder _testOrderManager;
        public HomeController(IBackgroundJobManager backgroundJobManager
            , ITestOrder testOrderManager
            )
        {
              _backgroundJobManager = backgroundJobManager;
            _testOrderManager = testOrderManager;
        }
        public ActionResult Index()
        {
            //List<string> strList = new List<string>();
            //strList.Add("母鸡啊");
            //strList.Add("我母鸡啊");
            //strList.Add("我真系母鸡啊");
            //ViewData["Test"] = strList;
            return View();
            //return View("~/App/Main/views/layout/layout.cshtml"); //Layout of the angular application.
        }
        /// <summary>
        /// 原生hangfire
        /// </summary>
        /// <returns></returns>
        public async Task Test()
        {
            BackgroundJob.Enqueue(() => _testOrderManager.CreateOrder(new Orders.Order() { Description="4397",Id=Guid.NewGuid(),Money=777,Num="clearlove777"}));
        }
        /// <summary>
        /// abp.hangfire
        /// </summary>
        /// <returns></returns>
        public async Task Test2()
        {
            _backgroundJobManager.Enqueue<TestJob, Orders.Order>(new Orders.Order() { Description = "4397", Id = Guid.NewGuid(), Money = 777, Num = "clearlove777777" });
        }
public class TestJob : IBackgroundJob<Order>, ITransientDependency
    {
        private readonly ITestOrder _testOrderManager;
      
        public TestJob(ITestOrder testOrderManager)
        {
            _testOrderManager = testOrderManager;
           
        }
        
        public async  void Execute(Order args)
        {
          await  _testOrderManager.CreateOrder(args);
        }
    }

 

 public interface ITestOrder
    {


        /// <summary>
        /// 添加订单
        /// </summary>
        /// <param name="ordreId"></param>
        /// <returns></returns>
        Task<Order> CreateOrder(Order args);
    }
[Hangfire.Queue("testqueue")]
    public class TestOrder : ITestOrder
    {
        private readonly OrderService _orderService;
      
        public TestOrder()
        {
            _orderService = IocManager.Instance.Resolve<OrderService>();
        }
        public async Task<Order> CreateOrder(Order args)
        {

            
              return  await _orderService.CreateOrderAsync(args);
          
        }


    }

 

abp.hangfire的用法:Enqueue<TJob, TArgs>(TArgs args) where TJob : IBackgroundJob<TArgs>;最后会在Excute方法里面去执行

原生hangfire用法:Enqueue(Expression<Func<Task>> methodCall),直接在参数里面调用方法

然鹅不知道为什么,我调用abp.hangfire的方法,执行是没问题的,但是在仪盘表里面没有显示该作业,而用原生的就可以显示。如图:

这是调用test2方法后的仪盘表,可以看到并没有新的作业生成,但是数据库确实添加了该数据

这是调用test方法,仪盘表有新的作业,数据库也插入正常

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM