亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

在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.49028c.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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产另类久久精品| 久久人人爽国产| 久久成人国产精品| 欧美成人激情图片网| 国产美女精品视频免费观看| 亚洲第一免费播放区| 欧美性开放视频| 久久精品国产精品| 国产精品丝袜高跟| 国产精品久久久久久久av电影| 国产一区二区三区在线观看视频| 欧美性猛交视频| 亚洲国产精品热久久| 久久人人爽人人爽人人片av高请| 国精产品一区一区三区有限在线| 亚洲aa在线观看| 欧美电影院免费观看| 色综合久久88色综合天天看泰| 亚洲在线视频福利| 亚洲精品国精品久久99热| 欧美日韩人人澡狠狠躁视频| 欧美自拍大量在线观看| 国产精品日韩在线| 亚洲成人中文字幕| 国产男人精品视频| 18性欧美xxxⅹ性满足| 亚洲欧美国产日韩天堂区| 伊人青青综合网站| 国产精品尤物福利片在线观看| 久久这里有精品视频| 欧美日韩性视频| 国产精品精品一区二区三区午夜版| 欧美性生交大片免网| 日韩精品中文字幕在线播放| 高清视频欧美一级| 亚洲欧洲偷拍精品| 久久躁狠狠躁夜夜爽| 91精品在线影院| 亚洲成人a级网| 日韩中文字幕在线视频播放| 欧美疯狂性受xxxxx另类| 另类少妇人与禽zozz0性伦| 91精品国产自产91精品| 亚洲成年人影院在线| 成人免费大片黄在线播放| 国产亚洲综合久久| 羞羞色国产精品| 久久久久在线观看| 国外视频精品毛片| 午夜精品一区二区三区在线视| 国产成人97精品免费看片| 成人国产精品日本在线| 国产精品久久久久久久久久| 欧美精品性视频| 久久99久国产精品黄毛片入口| 亚洲天堂男人的天堂| 45www国产精品网站| 日本伊人精品一区二区三区介绍| 国产精品免费久久久| 欧美第一页在线| 日韩有码在线观看| 精品国产一区久久久| 欧美精品在线观看| 亚洲欧美日韩天堂一区二区| 亚洲精品国产精品久久清纯直播| 中文字幕九色91在线| 亚洲少妇中文在线| 97超碰蝌蚪网人人做人人爽| 亚洲欧美国产一区二区三区| 日韩成人av在线播放| 日韩av中文字幕在线| 国产丝袜一区二区| 亚洲一区二区三区香蕉| 欧美制服第一页| 亚洲第一网站男人都懂| 欧美影院在线播放| 国产亚洲成精品久久| 欧美激情xxxxx| 久久精品国产亚洲精品| 久久伊人免费视频| 亚洲欧美在线看| 欧美一区二区大胆人体摄影专业网站| 亚洲三级av在线| 国产91av在线| 久久久久www| 亚洲电影免费在线观看| 久久久久久91| 韩曰欧美视频免费观看| 国产精品久久久久久久7电影| 久久久久久av| 亚洲石原莉奈一区二区在线观看| 久久精品视频在线| 欧美成人免费全部观看天天性色| 午夜精品久久久99热福利| 亚洲影院污污.| 欧美日韩一区二区免费在线观看| 日本免费在线精品| 秋霞成人午夜鲁丝一区二区三区| 亚洲精品狠狠操| 97视频免费看| 在线视频亚洲欧美| 亚洲va男人天堂| 亚洲天堂久久av| 精品中文字幕在线2019| 亚洲免费高清视频| 色综合久久88色综合天天看泰| 日韩欧美国产骚| 欧美在线性爱视频| 欧美理论在线观看| 97碰在线观看| 亚洲网在线观看| 自拍偷拍亚洲精品| 欧美男插女视频| 欧美精品videos性欧美| 高潮白浆女日韩av免费看| 欧美猛交ⅹxxx乱大交视频| 日韩精品高清在线观看| 亚洲欧美日韩中文在线| 日韩电影免费观看在线观看| 国内精品免费午夜毛片| 亚洲欧美国产一本综合首页| 国产91精品视频在线观看| 日韩电影免费观看中文字幕| 热门国产精品亚洲第一区在线| **欧美日韩vr在线| 亚洲精品在线视频| 亚洲天堂成人在线| 欧美日韩激情视频| 亚洲视频国产视频| 91九色在线视频| 色爱精品视频一区| www国产91| 美女av一区二区三区| 亚洲第一页自拍| 欧美日韩国产精品一区二区不卡中文| 亚洲国产精品999| 欧美尺度大的性做爰视频| 国产精品999999| 久久精品福利视频| 狠狠色狠狠色综合日日五| 青青久久av北条麻妃海外网| 一区三区二区视频| 欧美精品在线第一页| 国产午夜精品免费一区二区三区| 亚洲国产精品久久久久秋霞蜜臀| 亚洲另类图片色| 欧美性高潮床叫视频| 91久久久久久久久久久久久| 亚洲国产天堂网精品网站| 日本视频久久久| 午夜免费久久久久| 国产丝袜一区视频在线观看| 操日韩av在线电影| 国产精品自拍视频| 欧美性生交xxxxx久久久| 国产成人一区二| 亚洲精品国产精品国产自| 亚洲视频在线观看| 成人激情视频小说免费下载| 国产精品视频精品| 精品成人乱色一区二区| 亚洲精品欧美一区二区三区| 国产精品三级美女白浆呻吟| 国产精品免费视频久久久|