首页 > 其他 > 详细

hangfire的使用

时间:2019-03-21 11:41:31      阅读:155      评论:0      收藏:0      [点我收藏+]

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方法,仪盘表有新的作业,数据库也插入正常

 

hangfire的使用

原文:https://www.cnblogs.com/kenzoBlog/p/10570320.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!