日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net Core怎么使用Hangfire

發布時間:2024/1/8 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Core怎么使用Hangfire 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閑暇無事,寫個帖子記錄生活;

關于第一次使用hangfire使用的demo,該文章比較簡單,因為我現在比較冷;

首先

Q:為什么使用Hangfire?

A:鄙人愚見,使用Hangfire在于三點,1.任務持久化,2.擁有可視化控制臺界面,3.可重試

本文主要講述以下兩個方面:

一、添加及執行定時任務(周期任務)

? ? 使用場景:心跳檢查,定時更新,或者數據同步等需要循環執行的周期性任務

二、客戶端調用添加隊列任務(只執行一次)

? ? 使用場景:信息推送(郵件,短信,微信公眾號,釘釘等等),訂單超時(超過限定時間未付款則取消訂單)等只執行一次的任務,是否延時執行看需求;

廢話說完,回歸主題

一、添加引用NuGet包

Hangfire.AspNetCore? ? 為基礎包,必需

下面三個為數據持久化時持久地址,你用什么就挑那個引用就好了,tips:Hangfire默認的是MSSQL

Hangfire.MemoryStorage? ? 微軟提供的緩存,你程序掛了,這玩意兒也就沒了

Hangfire.MySql.Core? ? 持久化到mysql

Hangfire.Redis.StackExchange? ? 持久化到Redis緩存

二、準備一下我們執行任務的業務代碼

我這里準備一個工具類,也就是MailSmtp發送郵件(嗶嗶一下,該類直接從sugar官網直接copy過來的,特加強調)

然后實現一個消息服務類MessageService

public class MessageService : IMessageService{public void SendEmailMsg(string msg){var mail = new MailSmtp();bool isSuccess = mail.Send("@163.com", "test", "1007425623@qq.com", "哈哈", msg);Console.WriteLine($"發送消息:{msg}");}}

?

三、找到Startup.cs,添加如下代碼

public void ConfigureServices(IServiceCollection services){services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);//services.AddHangfire(x => x.UseStorage(new MySqlStorage(// //Configuration["ConnectionString"],// new MySqlStorageOptions// {// TransactionIsolationLevel = IsolationLevel.ReadCommitted, // 事務隔離級別。默認是讀取已提交。// QueuePollInterval = TimeSpan.FromSeconds(15), //- 作業隊列輪詢間隔。默認值為15秒。// JobExpirationCheckInterval = TimeSpan.FromHours(1), //- 作業到期檢查間隔(管理過期記錄)。默認值為1小時。// CountersAggregateInterval = TimeSpan.FromMinutes(5), //- 聚合計數器的間隔。默認為5分鐘。// PrepareSchemaIfNecessary = true, //- 如果設置為true,則創建數據庫表。默認是true。// DashboardJobListLimit = 50000, //- 儀表板作業列表限制。默認值為50000。// TransactionTimeout = TimeSpan.FromMinutes(1), //- 交易超時。默認為1分鐘。// TablePrefix = "Hangfire" //- 數據庫中表的前綴。默認為none// })));//services.AddHangfire(x => x.UseStorage(new MemoryStorage()));services.AddHangfire(configuration =>{configuration.UseRedisStorage("");});services.AddTransient<IMessageService, MessageService>();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseMvc();app.UseHangfireDashboard(); //使用hangfire面板app.UseHangfireServer(); //啟動hangfire服務RecurringJob.AddOrUpdate<IMessageService>(x => x.SendEmailMsg("================================Hangfire服務端定時任務================================"), Cron.Minutely());}

這個也很簡單,就去Hangfire官網,跳到github上看readme就行了

在這里我采用的是使用redis來當我作業持久化的地址,同時開放出我的reids地址,有緣人看到這篇文章的時候可以直接拿著項目跑起來看到效果;

直接F5,在端口后面加上 /hangfire 查看效果;例如:http://localhost:5000/hangfire

這時候,我們的第一個任務《定時任務》(周期任務)就已經完成了;

接下來第二個《隊列任務》(只執行一次),這也很簡單;

四、添加控制器及對應的接口

[Route("api/[controller]/[action]")][ApiController]public class DispatchController : ControllerBase{/// <summary>/// 添加一個任務到隊列并立即執行/// </summary>/// <param name="jobDescriptor"></param>/// <returns></returns>[HttpPost]public JsonResult AddEnqueue(){try{var jobId = string.Empty;jobId = BackgroundJob.Enqueue<IMessageService>(x => x.SendEmailMsg("================================客戶端添加的任務================================"));return new JsonResult(new { Flag = true, Message = $"Job:#{jobId}-已加入隊列" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 添加一個延遲任務到隊列/// </summary>/// <param name="jobDescriptor"></param>/// <returns></returns>[HttpPost]public JsonResult AddSchedule(){try{var jobId = string.Empty;jobId = BackgroundJob.Schedule(() => null, TimeSpan.FromMinutes(1));return new JsonResult(new { Flag = true, Message = $"Job:#{jobId}-已加入隊列" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 添加一個定時任務/// </summary>/// <param name="jobDestriptor"></param>/// <returns></returns>[HttpPost]public JsonResult AddRecurring(){try{var jobId = string.Empty;RecurringJob.AddOrUpdate("", () => null, Cron.Hourly, TimeZoneInfo.Local);return new JsonResult(new { Flag = true, Message = $"Job:已加入隊列" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 刪除一個定時任務/// </summary>/// <param name="jobName"></param>/// <returns></returns>[HttpDelete("DeleteRecurring")]public JsonResult Delete(string jobName){try{RecurringJob.RemoveIfExists(jobName);return new JsonResult(new { Flag = true, Message = $"Job:{jobName}已刪除" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 觸發一個定時任務/// </summary>/// <param name="jobName"></param>/// <returns></returns>[HttpGet("TriggerRecurring")]public JsonResult Trigger(string jobName){try{RecurringJob.Trigger(jobName);return new JsonResult(new { Flag = true, Message = $"Job:{jobName}已觸發執行" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}}

什么,代碼看著眼熟?恭喜你,記憶力相當可以,我復制某位大佬的,本文末會注明相關出處

這時候我們再F5啟動,

?

好了,搞定了,本文到此結束,對于本文的類別,更合適的名字應該叫整合吧

demo源碼:https://gitee.com/Jodro/Hangfire

本文相關鏈接:

https://blog.csdn.net/qinyuanpei/article/details/95936781

https://www.hangfire.io

?

總結

以上是生活随笔為你收集整理的.Net Core怎么使用Hangfire的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。