go使用Cron定時實現(xiàn)recover機制
robfig/cron v3 未實現(xiàn)recover
定時任務(wù)painc會導(dǎo)致程序內(nèi)存數(shù)據(jù)丟失,發(fā)生重啟,本教程是實現(xiàn)cron的recover機制。同樣也適用于長連接場景,比如tcp鏈接后,用戶發(fā)生行為調(diào)用rpc服務(wù),但是在調(diào)用前的某些操作,被抽象出來了,編程不合理等場景,發(fā)生painc,會導(dǎo)致當前用戶斷開鏈接,數(shù)據(jù)丟失。
維護handler,defer 處理recover
type CornDesc struct {
Name string
Spec string
NewFunc func()
}
func (c *CornDesc) Handle() {
defer c.final()
c.NewFunc()
}
func (c *CornDesc) final() {
if err := recover(); err != nil {
fmt.Printf("%s 捕獲運行異常! err :%v stack %s\n", c.Name, err, debug.Stack())
}
}
cmd 導(dǎo)入原則,此部分可以修改
var _Machine *Machine
type Machine struct {
*cron.Cron
exist map[string]int
}
func InitMachine(c *cron.Cron) *Machine {
if _Machine == nil {
_Machine = &Machine{
Cron: c,
exist: make(map[string]int),
}
}
return _Machine
}
func BaseMachine() *Machine {
return _Machine
}
func (m *Machine) Run() {
m.Cron.Run()
}
func (m *Machine) verify(cronDesc *CornDesc) error {
if id, ok := m.exist[cronDesc.Name]; ok {
return fmt.Errorf("任務(wù)已存在,name %s id %d", cronDesc.Name, id)
}
return nil
}
func (m *Machine) Register(cornDesc *CornDesc) error {
if err := m.verify(cornDesc); err != nil {
return err
}
id, err := m.Cron.AddFunc(cornDesc.Spec, cornDesc.Handle)
if err != nil {
return err
}
m.exist[cornDesc.Name] = int(id)
return nil
}
到此這篇關(guān)于go使用Cron定時實現(xiàn)recover機制的文章就介紹到這了,更多相關(guān)go recover機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解golang channel有無緩沖區(qū)的區(qū)別
這篇文章主要給大家介紹了golang channel有無緩沖區(qū)的區(qū)別,無緩沖是同步的,有緩沖是異步的,文中通過代碼示例給大家講解的非常詳細,需要的朋友可以參考下2024-01-01
golang interface{}類型轉(zhuǎn)換的實現(xiàn)示例
在Go語言中,類型轉(zhuǎn)換可以通過斷言、顯式、隱式和強制四種方式實現(xiàn),針對interface{}類型轉(zhuǎn)換為float32或float64,需要使用type斷言或reflect包處理,感興趣的可以了解一下2024-10-10
基于HLS創(chuàng)建Golang視頻流服務(wù)器的優(yōu)缺點
HLS 是 HTTP Live Streaming 的縮寫,是蘋果開發(fā)的一種基于 HTTP 的自適應(yīng)比特率流媒體傳輸協(xié)議。這篇文章主要介紹了基于 HLS 創(chuàng)建 Golang 視頻流服務(wù)器,需要的朋友可以參考下2021-08-08
go?singleflight緩存雪崩源碼分析與應(yīng)用
這篇文章主要為大家介紹了go?singleflight緩存雪崩源碼分析與應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
prometheus?client_go為應(yīng)用程序自定義監(jiān)控指標
這篇文章主要為大家介紹了prometheus?client_go為應(yīng)用程序自定義監(jiān)控指標詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

