最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言dolphinscheduler任務(wù)調(diào)度處理

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

簡介

dolphinscheduler是一個(gè)可視化DAG工作流任務(wù)調(diào)度平臺(tái),在大數(shù)據(jù)領(lǐng)域做任務(wù)調(diào)用非常流行

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

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

自動(dòng)化

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

此時(shí)就需要任務(wù)結(jié)果監(jiān)控和任務(wù)重跑來解決 失敗任務(wù)和任務(wù)自動(dòng)重跑,避免浪費(fèi)過多時(shí)間在維護(hù)dolphinscheduler任務(wù)上

使用

在調(diào)用api之前需要為用戶申請(qǐng)token,按圖操作

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

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

例子

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

任務(wù)結(jié)果檢查

填坑說明

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

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

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是空格的轉(zhuǎn)譯
   fmt.Println(fmt.Sprintf("%v%v",today,"%2000:00:00"))
   fmt.Println(fmt.Sprintf("%v%v",tomorrow,"%2000:00:00"))
   //需要檢查的項(xiàng)目名稱
   projects := []string{"jdOrder","jdPlay"}
   //需要檢查的時(shí)間段 頁碼是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)
      //將返回?cái)?shù)據(jù)從byte轉(zhuǎn)成json格式
      body, _ := resp.Body()
      var i interface{}
      var s []string
      _ = json.Unmarshal(body, &i)
      //搜索出需要的字段對(duì)應(yīng)數(shù)據(jù)
      processInstanceNames, _ := jmespath.Search("data.totalList[*].processInstanceName", i)
      //將interface轉(zhuǎn)成[]string
      for _,v := range processInstanceNames.([]interface{}) {
         s = append(s,v.(string))
      }
      //打印出結(jié)果
      for _,v := range s {
         fmt.Println(v)
      }
   }
}

測(cè)試連接

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

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)
}

重跑任務(wù)

重跑任務(wù)其實(shí)就是再次啟動(dòng)任務(wù),直接調(diào)用start_job既可

項(xiàng)目名稱和ID需要通過該接口獲取,這個(gè)是固定的

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

調(diào)用示例: 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
   }
}

小結(jié)

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

相關(guān)文章

  • Golang守護(hù)進(jìn)程用法示例分析

    Golang守護(hù)進(jìn)程用法示例分析

    這篇文章主要介紹了Golang守護(hù)進(jìn)程用法示例,創(chuàng)建守護(hù)進(jìn)程首先要了解go語言如何實(shí)現(xiàn)創(chuàng)建進(jìn)程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05
  • Go語言定時(shí)任務(wù)的實(shí)現(xiàn)示例

    Go語言定時(shí)任務(wù)的實(shí)現(xiàn)示例

    本文主要介紹了Go語言定時(shí)任務(wù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Golang中println和fmt.Println區(qū)別解析

    Golang中println和fmt.Println區(qū)別解析

    Golang 中打印數(shù)據(jù)通常使用 fmt.Println() 方法,也可以使用內(nèi)置的 println() 方法。這兩個(gè)方法大家可能都使用過,它們的區(qū)別是什么呢?本文給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • Go?為什么不支持可重入鎖原理解析

    Go?為什么不支持可重入鎖原理解析

    這篇文章主要為大家介紹了Go?為什么不支持可重入鎖原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Go語言排序算法之插入排序與生成隨機(jī)數(shù)詳解

    Go語言排序算法之插入排序與生成隨機(jī)數(shù)詳解

    從這篇文章開始將帶領(lǐng)大家學(xué)習(xí)Go語言的經(jīng)典排序算法,比如插入排序、選擇排序、冒泡排序、希爾排序、歸并排序、堆排序和快排,二分搜索,外部排序和MapReduce等,本文將先詳細(xì)介紹插入排序,并給大家分享了go語言生成隨機(jī)數(shù)的方法,下面來一起看看吧。
    2017-11-11
  • Go語言無緩沖的通道的使用

    Go語言無緩沖的通道的使用

    Go語言中無緩沖的通道是指在接收前沒有能力保存任何值的通道,本文主要介紹了Go語言無緩沖的通道的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • golang實(shí)現(xiàn)頁面靜態(tài)化操作的示例代碼

    golang實(shí)現(xiàn)頁面靜態(tài)化操作的示例代碼

    這篇文章主要介紹了golang實(shí)現(xiàn)頁面靜態(tài)化操作的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Golang使用crypto/ed25519實(shí)現(xiàn)數(shù)字簽名和驗(yàn)證

    Golang使用crypto/ed25519實(shí)現(xiàn)數(shù)字簽名和驗(yàn)證

    本文將深入探討如何在?Golang?中使用?crypto/ed25519?進(jìn)行數(shù)字簽名和驗(yàn)證,我們將從基本原理開始,逐步引導(dǎo)讀者了解生成密鑰對(duì)、進(jìn)行數(shù)字簽名,以及驗(yàn)證簽名的具體過程,希望對(duì)大家有所幫助
    2024-02-02
  • Go語言調(diào)用Shell與可執(zhí)行文件的實(shí)現(xiàn)

    Go語言調(diào)用Shell與可執(zhí)行文件的實(shí)現(xiàn)

    這篇文章主要介紹了Go語言調(diào)用Shell與可執(zhí)行文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 深入了解Golang中reflect反射基本原理

    深入了解Golang中reflect反射基本原理

    反射是這樣一種機(jī)制,它是可以讓我們?cè)诔绦蜻\(yùn)行時(shí)(runtime)訪問、檢測(cè)和修改對(duì)象本身狀態(tài)或行為的一種能力。本文主要帶大家來看看Golang中reflect反射基本原理,需要的可以參考一下
    2023-01-01

最新評(píng)論

八宿县| 塔河县| 洛川县| 湘潭县| 泉州市| 明光市| 休宁县| 秦安县| 松溪县| 青铜峡市| 安丘市| 佳木斯市| 铜鼓县| 桐庐县| 文昌市| 南和县| 西青区| 伊吾县| 民勤县| 武强县| 阿克| 明水县| 乌兰浩特市| 儋州市| 揭阳市| 博野县| 阆中市| 顺平县| 广元市| 全州县| 天峻县| 江西省| 高唐县| 鄂伦春自治旗| 丰都县| 凤凰县| 庆元县| 洞头县| 静乐县| 五华县| 长宁县|