HangFire循环作业中作业因执行时间太长未完成新作业开启导致重复数据的问题...
生活随笔
收集整理的這篇文章主要介紹了
HangFire循环作业中作业因执行时间太长未完成新作业开启导致重复数据的问题...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景
HangFire有個很奇怪的現象,就是即使你設置的循環作業是一天一次,但是每次作業執行很長時間,我們假設是1小時,那么差不多在開始執行之后的30分鐘之后,如果還在執行job,系統就會自動幫你重新開啟了新的job執行。也就是撇開循環周期的影響,我一個長時間的作業,超過三十分鐘的,那么系統又會在你還在執行的時候,三十分鐘之后又起一個來幫你執行。
問題窺探
我之前做項目的時候,就遇到這個問題,莫名其妙。開始的時候,我還以為可以像Quartz加個[DisallowConcurrentExecution]了事。
后面找到這個
但是測試了下,不起作用啊。而且一旦啟用分布式部署,這個就算有用,到時候不也沒用了,后面想想直接來個干脆的,分布式鎖。
解決辦法
1、進入job的時候,定義一個key,判斷是否正在執行。
2、redis-StringSet保證key是唯一的。
3、執行完成的時候,去掉鎖。
總結
1、這樣的話,就能在舊的還未完成之前,新的進來,直接return,保證唯一性,也支持了分布式處理。
2、分布式鎖在很多場景,還是很實用的。
總結
以上是生活随笔為你收集整理的HangFire循环作业中作业因执行时间太长未完成新作业开启导致重复数据的问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: K8s 中使用 cert-manager
- 下一篇: 如何获取 Process.Start 打