github地址 https://github.com/HangfireIO/Hangfire
官網 https://www.hangfire.io/
中文文檔 https://www.bookstack.cn/read/hangfire-zh/blankquick-start
這邊分享一下我從建立項目到部署的一個簡單的例子:
首先新建一個空的framework版本的MVC項目
然后執行
PM> Install-Package Hangfire
PM> Install-Package Hangfire.AspNet
這樣程序會將hangfire依賴的包下載安裝到項目中,然后給項目添加OwinStartup類
然后在Startup類中對hangfire進行初始化
1、使用儀表盤
2、使用sqlserver數據庫
3、因為儀表盤只能在本地訪問,服務器訪問返回401,所以需要權限過濾添加一個賬戶,在訪問儀表盤頁面的時候輸入賬號密碼即可進行訪問,密碼可以直接使用字符串如下,如果想保存為字節類型的則需要將明文的密碼轉換成字節形式代碼如下
using Hangfire; using Hangfire.Dashboard; using Hangfire.SqlServer; using Microsoft.Owin; using Owin; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; [assembly: OwinStartup(typeof(HangFireTest.Startup))] namespace HangFireTest { public class Startup { private IEnumerable<IDisposable> GetHangfireServers() { GlobalConfiguration.Configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSqlServerStorage("Data Source=10.18.193.200; Initial Catalog=HangfireTest; User ID=sa;Password=123456", new SqlServerStorageOptions { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, UsePageLocksOnDequeue = true, DisableGlobalLocks = true }); yield return new BackgroundJobServer(); } public void Configuration(IAppBuilder app) { app.UseHangfireAspNet(GetHangfireServers); var filter = new BasicAuthAuthorizationFilter( new BasicAuthAuthorizationFilterOptions { SslRedirect = false, // Require secure connection for dashboard RequireSsl = false, // Case sensitive login checking LoginCaseSensitive = false, // Users Users = new[] { //new BasicAuthAuthorizationUser //{ // Login = "Administrator-1", // // Password as plain text // PasswordClear = "test" //}, new BasicAuthAuthorizationUser { Login = "admin",//用戶名 // Password as SHA1 hash // Password = new byte[]{ 0x9f,0x71,0x30,0xf4,0x22,0x90,0xd0,0xe0,0xce,0x5a,0x8a,0x7a,0x09,0xd2,0xba,0x75,0x53,0x6d,0x05,0x64 }//密碼 PasswordClear="123456" } } }); var options = new DashboardOptions { AuthorizationFilters = new[] { filter } }; app.UseHangfireDashboard("/Hangfire", options); //可以改變Dashboard的url // Let's also create a sample background job //立即執行 BackgroundJob.Enqueue(() => Debug.WriteLine("Hello world from Hangfire!")); //BackgroundJob.Enqueue<EIPNewsSync>(x => x.AsyncNews()); //立即執行調用后臺方法 BackgroundJob.Enqueue(() => new MyTasks().DoAsync()); //可以設置延遲執行 BackgroundJob.Schedule( () => Console.WriteLine("延遲了2分鐘執行!"), TimeSpan.FromMinutes(2)); //可以設置定時執行循環執行 RecurringJob.AddOrUpdate<EIPNewsSync>(x => x.AsyncNews(), "0 */5 * * * ?");//Cron語法 每5分鐘執行一次 } } }
string password = "qwe123!";//將密碼轉換為字節形式 using (var cryptoProvider = System.Security.Cryptography.SHA1.Create()) { byte[] passwordHash = cryptoProvider.ComputeHash(Encoding.UTF8.GetBytes(password)); string result = "new byte[] { " + String.Join(",", passwordHash.Select(x => "0x" + x.ToString("x2")).ToArray()) + " } "; }
這邊可以對任務進行很多的操作,細節見官方文檔,這邊只做一個記錄,定時可以使用系統內置的Cron.中的方法,每天每分鐘每月等等,需要特殊的定時可以查詢Cron語法寫入即可
比如我們這邊發布后訪問http://10.18.193.200:2800/Hangfire

這里將代碼中的賬號密碼輸入即可訪問到儀表盤

我們可以清楚的查看執行過的作業內容,并可以重新加入隊列中進行執行

在周期性作業菜單中可以看到我們設置的每5分鐘執行一次的內容,包括立即執行、刪除、最后執行時間、下次執行時間等等

在服務器中,可以看到運行的服務器信息,心跳等

非常感謝您有耐心的讀完萬廣互聯的這篇文章:"Hangfire 分布式后端作業調度框架服務",僅為提供更多信息供用戶參考使用或為學習交流的方便。我們公司不僅提供:網站建設、網站制作、seo網站優化、網站推廣、小程序開發、商城開發、快速排名、網頁設計、建網站等服務,而且利用互聯網營銷手法,多平臺,多樣化進行品牌內容鋪設,營造企業正面形象,誠摯為您服務,歡迎您的到來。