麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

在ASP.NETWebAPI項目中使用Hangfire實現后臺任務處理

2019-11-14 14:04:23
字體:
來源:轉載
供稿:網友

當前項目中有這樣一個需求:由前端用戶的一個操作,需要觸發到不同設備的消息推送。由于推送這個具體功能,我們采用了第三方的服務。而這個服務調用有時候可能會有延時,為此,我們希望將消息推送與用戶前端操作實現異步執行,就是希望在后臺自動執行,不阻塞前端用戶的操作,而且最好能實現失敗重試等功能。

經過一些研究比較,我們發現使用Hangfire這個組件可以較好地實現這個需求。為了給大家做一個演示,我這里簡化了代碼,做一個范例程序。

我在這里不準備詳細介紹Hangfire的基本用法,有興趣的同學們可以參考官方網站 http://hangfire.io/  和文檔 http://docs.hangfire.io/en/latest/ 

imageimage

 

第一步:創建asp.net Web API項目

imageimage

 

第二步:安裝必要的nuget package

打開Nuget Package Manager Console

image

首先安裝Hangfire組件(Core,MemoryStorage),注意,因為后者是依賴前者的,所以我們只需要運行下面的命令即可

Install-Package Hangfire.MemoryStorage

image

Storage就是存儲的意思,Hangfire的后臺任務是需要一個地方保存起來,它默認支持SQL Server Storage和MemoryStorage。采用MemoryStorage無疑是最簡單的(不需要有任何外部的依賴)。當然,最大的問題就是,因為是放在內存中的,萬一網站出現問題重啟,那么沒有執行完的任務是會消失的。

如果要使用SQL Server的話,可以參考 http://docs.hangfire.io/en/latest/configuration/using-sql-server.html ,甚至還可以結合MSMQ來提高可用性 http://docs.hangfire.io/en/latest/configuration/using-sql-server-with-msmq.html 

 

接下來為當前項目啟用Owin的支持。關于什么是OWin,我這里也不準備多做說明,有興趣的同學可以參考 : http://www.companysz.com/dudu/p/what-is-owin.html  和 http://owin.org/ 還有 http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-PRoject-katana 

Install-Package Microsoft.Owin.Host.SystemWeb

image

 

第三步:添加Owin Startup Class

image

修改Startup.cs為下面這樣的代碼

using Hangfire;using Hangfire.MemoryStorage;using Microsoft.Owin;using Owin;[assembly: OwinStartup(typeof(WebapplicationWebApiHangfireSample.Startup))]namespace WebApplicationWebApiHangfireSample{    /// <summary>    /// 演示Hangfire的配置    /// 作者:陳希章    /// </summary>    public class Startup    {        public void Configuration(IAppBuilder app)        {            // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888            //指定Hangfire使用內存存儲后臺任務信息            GlobalConfiguration.Configuration.UseMemoryStorage();            //啟用HangfireServer這個中間件(它會自動釋放)            app.UseHangfireServer();            //啟用Hangfire的儀表盤(可以看到任務的狀態,進度等信息)            app.UseHangfireDashboard();        }    }}

 

 

第四步:實現一個簡單的Web API,啟動后臺任務

image

using Hangfire;using System;using System.Diagnostics;using System.Web.Http;namespace WebApplicationWebApiHangfireSample.Controllers{    /// <summary>    /// 用來公開給前端用戶調用的API    /// 作者:陳希章    /// </summary>    public class MessageController : ApiController    {        /// <summary>        /// 這個是用來發送消息的靜態方法        /// </summary>        /// <param name="message"></param>        public static void Send(string message)        {            EventLog.WriteEntry("EventSystem", string.Format("這是由Hangfire后臺任務發送的消息:{0},時間為:{1}", message, DateTime.Now));        }        public IHttpActionResult Post(string content)        {            //這里可以做一些業務判斷或操作                        //然后需要推送的時候,調用下面的方法即可            BackgroundJob.Enqueue(() => Send(content));                      //最后返回(這里是立即返回,不會阻塞)            return Ok();        }    }}

 

第五步:進行測試

我使用Fiddler來模擬客戶端調用

image

我們可以很容易地發起大量的請求,例如下面這樣

image

很快就在Dashboard中看到任務狀態(有1000個任務)

image

但是很快(不到1秒鐘的時間),這些任務就全部處理完了

image

 

我們可以在Windows事件日志中看到消息

image

以上就是我的簡單演示例子。當然,如果還想要實現失敗重試,或者更加有意思的一些功能(例如定時發送),可以繼續參考官方文檔。

這個范例代碼可以通過這里下載  http://files.VEVb.com/files/chenxizhang/WebApplicationWebApiHangfireSample.zip


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: chinese乱子伦xxxx国语对白 | 毛片一级片 | av观看国产 | 精品国产一区二区三区四区在线 | 在线看毛片的网站 | 成人福利视频在线观看 | 日本a级一区 | 国产精品视频在线观看免费 | 99视频有精品视频高清 | 色偷偷欧美 | 请播放一级毛片 | 国产成人高清成人av片在线看 | 国产成人自拍小视频 | 亚洲射吧 | 久章草在线视频 | 日本高清一级片 | 久久91精品国产91久久yfo | 成人啪啪色婷婷久 | 亚洲最大的成人网 | 日韩黄色三级视频 | 国产不卡av在线 | 88xx成人永久免费观看 | 中文字幕亚洲情99在线 | 一级黄色影院 | 亚洲视频成人 | 成人免费福利视频 | 欧美综合在线观看视频 | 操碰网| 久久成人免费观看 | 一级做a爱片毛片免费 | 国产精品久久久久久久午夜片 | 免费观看视频在线观看 | 成人在线网站 | 国产高潮好爽受不了了夜色 | av在线免费观看网 | 亚欧美一区二区 | 久久久一区二区三区精品 | 精品国产一区二区三区在线观看 | 亚洲成人精品视频 | 亚洲精品一区二区三区在线看 | 国产精品久久久久久一区二区三区 |