xxl-job集群部署

集群部署測試

環境: 本地docker

一、基礎設施部署

version: '3'
services:
 xxl-job-admin-1:
  image: xuxueli/xxl-job-admin:2.4.0
  container_name: xxl-job-admin-1
  # restart: always
  environment:
   - JAVA_OPTS=-Xmx512m -Xms512m
   # 指定數據庫連接
   - PARAMS=--spring.datasource.url=jdbc:mysql://數據庫地址/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=數據庫賬號 --spring.datasource.password=數據庫密碼 --server.servlet.context-path=/xxl-job-admin --xxl.job.accessToken=執行器注冊的token
  ports:
   - "8081:8080"
 xxl-job-admin-2:
  image: xuxueli/xxl-job-admin:2.4.0
  container_name: xxl-job-admin-2
  # restart: always
  environment:
   - JAVA_OPTS=-Xmx512m -Xms512m
   # 指定數據庫連接
   - PARAMS=--spring.datasource.url=jdbc:mysql://數據庫地址/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=數據庫賬號 --spring.datasource.password=數據庫密碼 --server.servlet.context-path=/xxl-job-admin --xxl.job.accessToken=執行器注冊的token
  ports:
   - "8082:8080"
 nginx:
  image: nginx
  container_name: nginx
  ports:
   - "80:80"
  volumes:
   - 宿主機路徑:/etc/nginx/conf.d
image.png

docker-compose up -d
請求localhost, nginx部署成功


image.png

請求localhost:8082/xxl-job-admin/


image.png

請求localhost:8081/xxl-job-admin/


image.png

綜上基礎設施部署即完成

二、集群負載

將xxl-job集群通過nginx做負載

upstream xxl_job_backend {
    server app1:8081; # 容器如果沒有搭建網絡則使用本地ip, 不要使用localhost或127.0.0.1在nginx容器中無法識別, 有搭建網絡直接使用容器名,如xxl-job-admin-1:8081
    server app2:8082;
}

server {
    listen 80;
    server_name xxl-job.zpl.com; # 配置成相應域名

    location / {
        proxy_pass  http://xxl_job_backend; 
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}


進入nginx容器 ./usr/sbin/nginx -s reload

后請求: http://xxl-job.zpl.com/xxl-job-admin/toLogin

image.png

則負載構建完成

三、功能測試

執行器代碼(golang):

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/xxl-job/xxl-job-executor-go"
)

// JobHandler 是一個簡單的任務處理器,打印 "hello world"
func JobHandler() xxl.TaskFunc {
    return func(cxt context.Context, param *xxl.RunReq) string {
        log.Printf("run job at %s", time.Now().Format("2006-01-02 15:04:05"))
        return "hello world"
    }
}

func main() {
    // 創建一個新的執行器
    executor := xxl.NewExecutor(
        xxl.ServerAddr("http://xxl-job.zpl.com/xxl-job-admin"), // XXL-JOB 調度中心的地址
        xxl.AccessToken("dev-xxl-job-token"),                                 // AccessToken(可選)
        xxl.ExecutorIp(""),                                  // 執行器IP(可選)
        xxl.ExecutorPort("9999"),                            // 執行器端口
        xxl.RegistryKey("golang-jobs"),                      // 執行器名稱
    )
    executor.Init()
    // 注冊任務處理器
    executor.RegTask("helloJob", JobHandler())

    // 啟動執行器
    if err := executor.Run(); err != nil {
        log.Fatalf("executor run failed: %v", err)
    }

    // 阻止程序退出
    select {}
}

啟動后輸出日志, 則執行器注冊成功

image.png

可在xxl-job執行器界面看到相應的注冊信息

image.png

注冊任務:

image.png

執行后可看到執行器輸出:

image.png

至此執行器注冊完畢

image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 項目中有使用到定時任務,目前通過springMVC結合quartz的方式實現,缺點是操作繁瑣,監控不足,如定...
    西5d閱讀 2,892評論 0 1
  • 概述 XXL-JOB是一個輕量級分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源...
    Tian_Peng閱讀 410,806評論 2 142
  • 概述 XXL-JOB是一個輕量級分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源...
    公子小白123閱讀 858評論 0 0
  • 本地測試要用到xxl-job,官方文檔關于docker部署xxl-job描述的不夠詳細,所以寫一個關于docker...
    丶那風很美閱讀 9,099評論 1 2
  • 官方文檔: - [中文文檔](https://www.xuxueli.com/xxl-job/) - [Engli...
    深_51f7閱讀 853評論 0 0