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