iris和xxl-job整合


在以前的文章中go任務調器gocron和xxl-job 嘗試xxl和gin的整合,由於項目統一用iris 所以需要研究出如何與iris整合, 直接上代碼:

package main
 
import (
    "context"
    "fmt"
 
    "log"
 
    "github.com/kataras/iris/v12"
    "github.com/xxl-job/xxl-job-executor-go"
)
 
func main() {
    exec := xxl.NewExecutor(
        xxl.ServerAddr("http://192.168.100.30:9080/xxl-job-admin"),
        xxl.AccessToken(""),             //請求令牌(默認為空)
        xxl.ExecutorIp("192.168.100.2"), //可自動獲取
        xxl.ExecutorPort("9999"),        //默認9999(非必填)
        xxl.RegistryKey("golang-jobs"),  //執行器名稱
        xxl.SetLogger(&logger{}),        //自定義日志
    )
    exec.Init()
 
    //設置日志查看handler
    exec.LogHandler(func(req *xxl.LogReq) *xxl.LogRes {
        return &xxl.LogRes{Code: 200, Msg: "", Content: xxl.LogResContent{
            FromLineNum: req.FromLineNum,
            ToLineNum:   2,
            LogContent:  "這個是自定義日志handler",
            IsEnd:       true,
        }}
    })
 
    //添加到iris路由
 
    app := iris.New()
 
    app.Post("run", func(ctx iris.Context) {
        exec.RunTask(ctx.ResponseWriter(), ctx.Request())
    })
    app.Post("kill", func(ctx iris.Context) {
        exec.KillTask(ctx.ResponseWriter(), ctx.Request())
    })
    app.Post("log", func(ctx iris.Context) {
        exec.TaskLog(ctx.ResponseWriter(), ctx.Request())
    })
 
    //注冊iris的handler
    app.Get("/", func(ctx iris.Context) {
        ctx.WriteString("pong")
    })
 
    //注冊任務handler
    exec.RegTask("golang.test", Task_Test)
    log.Fatal(app.Run(iris.Addr(":9999")))
}
 
//xxl.Logger接口實現
type logger struct{}
 
func (l *logger) Info(format string, a ...interface{}) {
    fmt.Println(fmt.Sprintf("自定義日志 - "+format, a...))
}
 
func (l *logger) Error(format string, a ...interface{}) {
    log.Println(fmt.Sprintf("自定義日志 - "+format, a...))
}
 
func Task_Test(cxt context.Context, param *xxl.RunReq) (msg string) {
    fmt.Println("test one task  " + param.ExecutorHandler + " param:" + param.ExecutorParams + " log_id:" + xxl.Int64ToStr(param.LogID))
    fmt.Println(cxt)
    return "iris test done"
}

本地運行結果:

k8s運行:

Dockerfile

FROM golang:1.15.6
 
RUN mkdir -p /app
 
WORKDIR /app
 
ADD main /app/main
 
EXPOSE 30903
 
CMD ["./main"]

build.sh

#!/bin/bash
#cd $WORKSPACE
 
export GOPROXY=https://goproxy.io
 
 #根據 go.mod 文件來處理依賴關系。
go mod tidy
 
# linux環境編譯
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
 
# 構建docker鏡像,項目中需要在當前目錄下有dockerfile,否則構建失敗
docker build -t xlliris .
docker tag  xlliris 192.168.100.30:8080/go/xlliris:2021
 
docker login -u admin -p '123456' 192.168.100.30:8080
docker push 192.168.100.30:8080/go/xlliris
 
docker rmi  xlliris
docker rmi 192.168.100.30:8080/go/xlliris:2021

deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: xlliris
  namespace: go
  labels:
    app: xlliris
    version: v1
spec:
  replicas: 1
  minReadySeconds: 10 
  selector:
    matchLabels:
      app: xlliris
      version: v1
  template:
    metadata:
      labels:
        app: xlliris
        version: v1
    spec:
      imagePullSecrets:
      - name: regsecret
      containers:
      - name: xlliris
        image: 192.168.100.30:8080/go/xlliris:2021
        ports:
        - containerPort: 30903
        imagePullPolicy: Always
 
---
 
apiVersion: v1 
kind: Service 
metadata:
  name: xlliris
  namespace: go 
  labels:
    app: xlliris
    version: v1
spec:
  type: NodePort
  ports:
    - port: 30903 
      targetPort: 30903 
      nodePort: 30903
      protocol: TCP
  selector:
    app: xlliris

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM