[.NET]使用 Hangfire 如何知道那個 Job 執行了多久呢?

使用 Hangfire 如何知道那個 Job 執行了多久呢?

當我們將原本同步執行的Job,放到了 Hangfire 之中,

我們要如何知道那個Job到底在 Hangfire 之中等了多久,

而透過 Hangfire 去執行時,實際上是執行多久呢?

image

 

參考「Duration and latency metrics for succeeded jobs」這篇可以得知,

在Job的詳細資料中,Succeeded時,裡面有2個時間,Latency 及 Duration 。

Latency:表示這個 Job 在 Hangfire 之中等了多久,才被執行。

Duration:表示這個 Job 透過 Hangfire 執行到成功,花了多少時間。

 

也可以查詢 Hangfire DB中 State 的資料表,如下,


select J.Arguments, S.Data 
from [HangFire].[Job] J inner join [HangFire].[State] S
on J.Id = S.JobId
where S.Name = 'Succeeded'

image

 

因為 State.Data 裡面是 JSON 字串,如果要解析它的話,可以拿「Consuming JSON Strings in SQL Server」裡面的Function,

然後取出相關的資訊,如下,


select J.Id,  J.Arguments, SD.NAME, SD.StringValue as ExecMS
from [HangFire].[Job] J inner join [HangFire].[State] S
on J.Id = S.JobId
cross apply dbo.parseJSON(S.Data) SD
where S.Name = 'Succeeded'
and SD.NAME IN ('PerformanceDuration', 'Latency');

image

 

所以可以依這2個值來調整 Hangfire 的 WorkerCount 哦! 程式片斷如下,


var options = new BackgroundJobServerOptions
{
	//設定 Hangfire 同一時間,可以處理多少的 Job
	WorkerCount = DegreeOfParallelism,
};
//設定 Retry 的次數
GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute { Attempts = RetryTimes });
_backgroundJobServer = new BackgroundJobServer(options);

 

 

 

參考資料

Duration and latency metrics for succeeded jobs

Consuming JSON Strings in SQL Server

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^