集群部署測試
環境: 本地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