欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言dolphinscheduler任務調度處理

 更新時間:2022年06月08日 14:45:21   作者:愛吃紅薯粉  
這篇文章主要為大家介紹了Go語言dolphinscheduler任務調度處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

簡介

dolphinscheduler是一個可視化DAG工作流任務調度平臺,在大數(shù)據(jù)領域做任務調用非常流行

提供了類似azkaban工作流調度,比azkaban更強的可視化DAG,支持大數(shù)據(jù)領域flink,spark,shell,python,java,scala,http等各種類型任務

官網(wǎng)傳送門: https://dolphinscheduler.apache.org/zh-cn/

自動化

為什么需要自動化任務處理,當你的dolphinscheduler有幾百上千個任務,管理是非常耗時的,如果每個任務都配置郵件告警,那一有問題整天都在救火

此時就需要任務結果監(jiān)控和任務重跑來解決 失敗任務和任務自動重跑,避免浪費過多時間在維護dolphinscheduler任務上

使用

在調用api之前需要為用戶申請token,按圖操作

dolphinscheduler提供類似swagge接口UI工具,訪問doc地址訪問

http://ip:12345/dolphinscheduler/doc.html?language=zh_CN&lang=cn

例子

該demo還是使用了http請求包(HttpRequest),json數(shù)據(jù)搜索包(go-jmespath)

任務結果檢查

填坑說明

  • 日期處理: 使用了%20轉譯空格,使用Sprintf方法拼接字符串
  • 多種數(shù)據(jù)類型: 使用interface{}來支持int,string等多種數(shù)據(jù)類型
  • 數(shù)據(jù)轉換1: 將byte數(shù)據(jù)轉成json格式,方便搜索
  • 數(shù)據(jù)轉換2: 將interface{}數(shù)據(jù)轉成字符串切片,方便使用

該方法可以做成周期性任務運行,將失敗的job查出來,后續(xù)是要告警通知,還是根據(jù)job名稱查出對應id進行重跑任務

package main
import (
   "encoding/json"
   "fmt"
   "github.com/jmespath/go-jmespath"
   "github.com/kirinlabs/HttpRequest"
   "time"
)
var (
   url = "http://ip:12345/dolphinscheduler"
   token = "xxxxxxx"
   req *HttpRequest.Request
)
func init() {
   req = HttpRequest.NewRequest().Debug(true).SetTimeout(time.Second*5).
      SetHeaders(map[string]string{
         "token":token,
      })
}
func main() {
   //testConn()
   jobCheck()
}
func jobCheck()  {
   //獲取日期
   today := time.Now().Format("2006-01-02")
   tomorrow := time.Now().AddDate(0, 0, +1).Format("2006-01-02")
   //拼接日期 %20是空格的轉譯
   fmt.Println(fmt.Sprintf("%v%v",today,"%2000:00:00"))
   fmt.Println(fmt.Sprintf("%v%v",tomorrow,"%2000:00:00"))
   //需要檢查的項目名稱
   projects := []string{"jdOrder","jdPlay"}
   //需要檢查的時間段 頁碼是int類型,日期是string類型
   m := make(map[string]interface{})
   m["pageNo"] = 1
   m["pageSize"] = 22
   m["stateType"] = "FAILURE"
   m["startDate"] = fmt.Sprintf("%v%v",today,"%2000:00:00")
   m["endDate"] = fmt.Sprintf("%v%v",tomorrow,"%2000:00:00")
   for _, project := range projects {
      resp, _ := req.Get(url+"/projects/"+project+"/task-instance/list-paging",m)
      if resp.StatusCode() != 200 {
         fmt.Println("job檢查狀態(tài)碼不符期望: ",resp.StatusCode())
         return
      }
      fmt.Println("resp",resp)
      //將返回數(shù)據(jù)從byte轉成json格式
      body, _ := resp.Body()
      var i interface{}
      var s []string
      _ = json.Unmarshal(body, &i)
      //搜索出需要的字段對應數(shù)據(jù)
      processInstanceNames, _ := jmespath.Search("data.totalList[*].processInstanceName", i)
      //將interface轉成[]string
      for _,v := range processInstanceNames.([]interface{}) {
         s = append(s,v.(string))
      }
      //打印出結果
      for _,v := range s {
         fmt.Println(v)
      }
   }
}

測試連接

如果上小節(jié)任務跑不成功,可以先運行該方法,測試連接正確性

func testConn() {
   resp, _ := req.Get(url + "/projects/query-project-list")
   fmt.Println("resp",resp)
   body, _ := resp.Body()
   var i interface{}
   _ = json.Unmarshal(body, &i)
   fmt.Println("i",i)
}

重跑任務

重跑任務其實就是再次啟動任務,直接調用start_job既可

項目名稱和ID需要通過該接口獲取,這個是固定的

http://ip:12345/dolphinscheduler/projects/monitor/process/list-paging

調用示例: startJob("ads_jd_order",678)

func startJob(projectName string,projectId int)  {
   m := make(map[string]interface{})
   m["failureStrategy"] = "CONTINUE"
   m["warningGroupId"] = 0
   m["warningType"] = "NONE"
   m["runMode"] = "RUN_MODE_SERIAL"
   m["processInstancePriority"] = "MEDIUM"
   m["workerGroup"] = "default"
   m["processDefinitionId"] = projectId
   resp, _ := req.JSON().Post(url+"projects/" + projectName+"/executors/start-process-instance",m)
   if resp.StatusCode() != 200 {
      fmt.Println("job開始狀態(tài)碼不符期望: ",resp.StatusCode())
      return
   }
}

小結

dolphinscheduler api調用有文檔,不太復雜,但網(wǎng)上資料較少,需要自行摸索,以上就是Go語言dolphinscheduler任務調度處理的詳細內容,更多關于Go語言dolphinscheduler任務調度的資料請關注腳本之家其它相關文章!

相關文章

  • go語言的變量定義示例詳解

    go語言的變量定義示例詳解

    這篇文章主要為大家介紹了go語言的變量定義示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • GoLang并發(fā)機制探究goroutine原理詳細講解

    GoLang并發(fā)機制探究goroutine原理詳細講解

    goroutine是Go語言提供的語言級別的輕量級線程,在我們需要使用并發(fā)時,我們只需要通過 go 關鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機制goroutine原理,感興趣的可以了解一下
    2022-12-12
  • Go項目分層下的最佳error處理方式分享

    Go項目分層下的最佳error處理方式分享

    這篇文章主要來和大家一起探討?Go?項目分層下的最佳?error?處理方式,準備好了嗎?準備一杯你最喜歡的飲料或茶,隨著本文一探究竟吧
    2023-06-06
  • GOLANG使用Context管理關聯(lián)goroutine的方法

    GOLANG使用Context管理關聯(lián)goroutine的方法

    這篇文章主要介紹了GOLANG使用Context管理關聯(lián)goroutine的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Goland的設置與配置全過程

    Goland的設置與配置全過程

    這篇文章主要介紹了Goland的設置與配置全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 利用Go語言搭建WebSocket服務端方法示例

    利用Go語言搭建WebSocket服務端方法示例

    這篇文章主要給大家介紹了利用Go語言搭建WebSocket服務端方法,文中通過示例代碼介紹的非常詳細,需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • GoLang橋接模式的實現(xiàn)示例

    GoLang橋接模式的實現(xiàn)示例

    橋接模式是一種結構型設計模式,通過橋接模式可以將抽象部分和它的實現(xiàn)部分分離,本文主要介紹了GoLang橋接模式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 淺析Go語言bitset的實現(xiàn)原理

    淺析Go語言bitset的實現(xiàn)原理

    bitset包是一個將非負整數(shù)映射到布爾值的位的集合,這篇文章主要通過開源包bitset來為大家分析一下位集合的設計和實現(xiàn),感興趣的可以學習一下
    2023-08-08
  • Golang學習之無類型常量詳解

    Golang學習之無類型常量詳解

    對于無類型常量,可能大家是第一次聽說,但我們每天都在用,每天都有無數(shù)潛在的坑被埋下。本文就來和大家聊聊它的相關注意事項吧,希望對大家有所幫助
    2023-03-03
  • 詳解go-zero如何使用validator進行參數(shù)校驗

    詳解go-zero如何使用validator進行參數(shù)校驗

    這篇文章主要介紹了如何使用validator庫做參數(shù)校驗的一些十分實用的使用技巧,包括翻譯校驗錯誤提示信息、自定義提示信息的字段名稱、自定義校驗方法等,感興趣的可以了解下
    2024-01-01

最新評論